一、Qt Designer自定義槽函數
發現:在VS2008 +Qt4.7 中打開ui文件,所用的英文QT Designer工具,沒有轉到槽函數的功能,不如QtCreator自帶的QtDesigner功能齊全,只能Editor已有的信號槽。
發現:在QtCreator中右擊某個控件 有"轉到槽"功能,就會在.h和.cpp文件中生成我們的自定義槽函數void on_openButton_clicked()
解決方法:在VS2008中,選擇某個項目,選擇菜單Qt/Creat basic .pro File 然后用QtCreator打開.pro文件,就可以以Qt工程文件編輯我們的界面,然后右擊控件轉槽功能,自定義我們的槽函數。在VS2008里一樣可以引用。信號也可以在QtDesigner中自定義,但無法寫觸發函數,一般控件自帶的信號已經夠我們用了。所以要自定義信號並觸發,還是在我們的.h和.cpp文件中手寫即可。
當然,如果我們自己在VS2008中ui文件相應的.h和.cpp文件中,手動寫槽函數,在ui界面中,Qt也可以自動識別的。
從前面知道
二、我們也可以手動定義槽函數,ui界面可以自動識別
問題:相對於用代碼生成界面來講,使用QtDesigner來直接設計界面不失為一個更快捷直觀的方法。在添加完控件后,怎么進行信號和槽的連接呢?Qt Designer中提供了一"Singal/Slot Editor",對於已有的信號和槽,直接新建,選擇相應的Signal和slot就好了。可是往往我們需要編寫自己的Slot函數,這時應該怎么添加呢?有以下幾種方法:
1.按照一定的格式規范命名Slot函數,setupUi()函數可以自動將符合on_objectName_signalName()命名的槽與相應的ObjectName的SignalName連接在一起。不需要自己寫connect()函數了。
例如UI里新建了一個openButton,在.h文件里聲明void on_openButton_clicked()函數並在cpp文件里添加這個函數的定義后,seupUi()就可以自動將openButton的clicked信號與我們定義的slot函數聯系在一起了!
我們的.ui文件自動生成的ui_mainwindow.h文件里的代碼總會有一句:
Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form:
void on_<object name>_<signal name>(<signal parameters>);
Let's assume our object has a child object of type QPushButton with the object name button1. The slot to catch the button's clicked() signal would be:
void on_button1_clicked();
2.直接在.h文件和cpp文件里定義slot函數,例如void open();進入到Edit Signal and slots模式下,在我們要響應slot函數的控件上滑動鼠標左鍵,便會出來一個Configure connection的對話框,點Edit,這時我們需要的open函數出現啦,選擇這個函數,就完成了信號和槽的連接。在Edit里我們還能新建新的槽,先新建,再添代碼也能達到同樣的目的~
???????
上面2有疑問:界面上綁定信號槽,只能在同一個ui的對象,所以還是需要手動寫connect()函數實現信號槽連接