什麼是信號和槽?信號和槽的作用
信號和槽都是函數,比如按下窗口上的一個按鈕後想要彈出一個對話框,那麼就可以將這個按鈕的單擊信號和我們定義的槽關聯起來,在這個槽中可以創建一個對話框,並且顯示它。這樣,當單擊這個按鈕時就會發射信號,進而執行我們的槽來顯示一個對話框
接下來用信號和槽的機制建立一個項目。先看看該項目的作用:點擊“顯示子窗口”會彈出小的窗口。
項目編寫過程(手動關聯方式,常使用方式):
(1)接着上一個mywidget1項目寫。雙擊mywidget.ui文件(運行結果)添加Label,編輯文字“我是主界面”。加Push Button,編輯“顯示子窗口”。注意:這裏將Push Button的objectName改爲showChildButton。
(2)在mywidget.h文件中MyWidget類聲明的最後添加槽的聲明:
public slots:
void showChildDialog();
(3)在.cpp文件中編輯showChildDialog()槽的實現:
void MyWidget::showChildDialog()
{
QDialog *dialog = new QDialog(this);
dialog ->show();
}
(4)修改MyWidget類的構造函數:
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent), //mywidget類的構造函數。
ui(new Ui::MyWidget)
{
ui->setupUi(this);
connect(ui->showChildButton,&QPushButton::clicked,
this,&MyWidget::showChildDialog);
}
connect()函數將按鈕的單擊信號clicked()與新建的槽關聯。
發射信號的對象:showChildButton;發射的信號:QPushButton:clicked(信號爲clicked該按鈕)
接收信號的對象:MyWidget ;執行的槽 :showChildDialog。
自動關聯方式:
手動關聯方式關鍵在於:connect()函數將信號和槽按一定格式關聯起來。
自動關聯方式關鍵在於:將槽按一定格式重新命名。例如:on_showChildButton_clicked(),由字符on、發射信號的部件名showChildButton、信號名clicked()組成。
實現過程:
(1)刪除connect()函數。
(2)按下圖方式,然後重新命名