QT 默認槽函數 connectSlotsByName淺析

在查看Qt一些項目的時候,代碼中竟然找不到signal和slot的連接。但是最終的程序,slot卻又能準確的響應信號。爲什麼?

經過一番認(上)真(網)學(百)習(度),在 ui->setupUi(this); 函數中最後有一句這樣的代碼:

QMetaObject::connectSlotsByName(MainWindow);

再去看QT助手,其函數原型是這樣的:

[static] void QMetaObject::connectSlotsByName(QObject *object)

給出的說明:遞歸搜索給定對象的所有子對象,並將來自這些子對象的匹配信號連接到以下形式的對象插槽:

void on_<object name>_<signal name>(<signal parameters>);

假設我們的對象有一個類型爲QPushButton的子對象,對象名爲button1。捕捉按鈕的clicked()信號的槽是:

void on_button1_clicked();

如果對象本身具有正確設置的對象名稱,則其自身的信號也將連接到其各自的插槽。

 

綜上所述,只要槽函數名規則是這樣的:on_子對象名_信號名,如:

public slots:
   void on_actionNew_triggered();

就可以不用寫connect函數來連接信號和槽了!但是需要注意的是:

1、儘量不要讓QObject出現相同的objectName

2、如果同名,connectSlotsByName只會給其中一個建立缺省的信號槽的連接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章