今天在 tablewidget中寫了個委託。
想實現 點擊委託中的editor(一個button),在主窗口可以顯示菜單。 一開始就想到了信號槽機制,可是問題在於 button 是 委託中的,無法直接與主窗口進行connect。html
後來發現,是本身信號槽沒學好,在這裏能夠使用自定義的方式。
將button與委託關聯,而後委託與主窗口關聯。安全
能夠參照博文:
http://blog.csdn.net/lywzgzl/article/details/41085385函數
個人實現方式:
在 委託中添加了自定義的信號以及槽函數:post
signals: void sendMessage(); public slots: void on_Clicked(bool);
而後將button的clicked信號與槽函數關聯,在槽函數中發送信號。this
connect(button,SIGNAL(clicked(bool)),this,SLOT(on_Clicked(bool)));
void ComboxDelegate::on_Clicked(bool) { emit sendMessage(); }
最後就是在主窗口中將委託與之關聯:.net
connect(comboxDelegate,SIGNAL(sendMessage()),this,SLOT(on_Click()));
在引用的博客連接中時使用的是自動鏈接命令方式:
void on_<object name>_<signalname>(<signal parameters>)
線程
信號槽的鏈接方式:
http://www.cnblogs.com/findumars/p/5176419.htmlcode
Constant | Value | Description |
---|---|---|
Qt::AutoConnection | 0 | 自動鏈接:默認的方式。信號發出的線程和糟的對象在一個線程的時候至關於:DirectConnection, 若是是在不一樣線程,則至關於QueuedConnection |
Qt::DirectConnection | 2 | 直接鏈接:至關於直接調用槽函數,可是當信號發出的線程和槽的對象再也不一個線程的時候,則槽函數是在發出的信號中執行的。 |
Qt::QueuedConnection | 3 | 隊列鏈接:內部經過postEvent實現的。不是實時調用的,槽函數永遠在槽函數對象所在的線程中執行。若是信號參數是引用類型,則會另外複製一份的。線程安全的。 |
Qt::BlockingQueuedConnection | 4 | 阻塞鏈接:此鏈接方式只能用於信號發出的線程(通常是先好對象的線程) 和 槽函數的對象再也不一個線程中才能用。經過信號量+postEvent實現的。不是實時調用的,槽函數永遠在槽函數對象所在的線程中執行。可是發出信號後,當前線程會阻塞,等待槽函數執行完畢後才繼續執行。 |
Qt::UniqueConnection | 0x80 | 防止重複鏈接。若是當前信號和槽已經鏈接過了,就再也不鏈接了。 |
其中UniqueConnection只能算是一個防止重複鏈接的參數,並不算是一種鏈接方式;而AutoConnection作爲默認的方式,會選擇DirectConnection或者QueuedConnectionhtm