多窗口之間使用信號槽 信號槽鏈接方式

今天在 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);
  • 1
  • 2
  • 3
  • 4
  • 5

而後將button的clicked信號與槽函數關聯,在槽函數中發送信號。this

connect(button,SIGNAL(clicked(bool)),this,SLOT(on_Clicked(bool)));
  • 1
void ComboxDelegate::on_Clicked(bool)
{
    emit sendMessage();
}
  • 1
  • 2
  • 3
  • 4

最後就是在主窗口中將委託與之關聯:.net

connect(comboxDelegate,SIGNAL(sendMessage()),this,SLOT(on_Click()));
  • 1

在引用的博客連接中時使用的是自動鏈接命令方式:
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

相關文章
相關標籤/搜索