一. 簡介
????????在Qt中使用信號和槽機(jī)制來完成對象之間的協(xié)同操作。簡單來說,信號和槽都是函數(shù),比如按下窗口上的一個(gè)按鈕后想要彈出一個(gè)對話框,那么就可以將這個(gè)按鈕的單擊信號和我們定義的槽關(guān)聯(lián)起來,在這個(gè)槽中可以創(chuàng)建一個(gè)對話框,并且顯示它。這樣,當(dāng)單擊這個(gè)按鈕時(shí)就會(huì)發(fā)射信號,進(jìn)而執(zhí)行我們的槽來顯示一個(gè)對話框。
? ? ? ? 實(shí)際上,我們一般需要自己實(shí)現(xiàn)的是槽函數(shù)。槽函數(shù)即:接收到信號后所要執(zhí)行的動(dòng)作。
二. 聲明
/*
* 使用關(guān)鍵字:signals,來聲明信號函數(shù)
*/
signals:
void sig_updateNtpTime(QString *time);
/*
* 使用關(guān)鍵字:slots,來聲明槽函數(shù)。
* 一般槽函數(shù)需要指明權(quán)限:public/private/protected等
*/
public slots:
void slot_receiveTime(QString *time);
注意:?槽一般使用slots關(guān)鍵字進(jìn)行修飾(Qt 4中必須使用,Qt 5以后使用新connect語法時(shí)可以不用,為了與一般函數(shù)進(jìn)行區(qū)別,建議使用)
三. 信號的類別
1)基于部件對象,可以使用其類中自帶的信號(比如:按鈕部件,其類中自帶的信號)
/*
* 1)clicked(): 被點(diǎn)擊
* 2) clicked(bool):被點(diǎn)擊,區(qū)分是否被選中(一般在單選框部件中使用)
* 3)pressed(): 按鈕被按下
* 4)released(): 按鈕被松開
*/
2)自定義信號
/*
* 使用關(guān)鍵字:signals,來自定義信號
*/
signals:
void sig_updateNtpTime(QString *time);
四. 信號和槽的關(guān)聯(lián)方式
1.??使用connect()函數(shù)關(guān)聯(lián)
// 函數(shù)原型
QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
// connect()函數(shù)中的四個(gè)參數(shù)分別是:發(fā)送信號的對象、發(fā)送的信號、接收信號的對象和要執(zhí)行的槽。
信號觸發(fā)形式:
1)使用部件對象自帶的信號
connect(ui->button, SIGNAL(clicked()), this, SLOT(slot_exitsCardsDevice()));
// 當(dāng)點(diǎn)擊按鈕button時(shí),觸發(fā)信號-->執(zhí)行槽函數(shù) slot_exitsCardsDevice().
2)使用自定義的信號
connect(ui->functionBtn_1, SIGNAL(sig_mouseReleaseEvent()), this, SLOT(slot_functionBtn_1_clickedX()));
//使用關(guān)鍵字:emit,來觸發(fā)自定義信號
emit sig_mouseReleaseEvent();//執(zhí)行后,觸發(fā)槽函數(shù) slot_functionBtn_1_clickedX()
2. 自動(dòng)關(guān)聯(lián)
????????在設(shè)計(jì)模式中的UI主設(shè)計(jì)區(qū),選擇需要操作的部件,右擊,在彈出的菜單上選擇“轉(zhuǎn)到槽”,根據(jù)需求選擇對應(yīng)的槽函數(shù)。
????????自動(dòng)關(guān)聯(lián)就是將關(guān)聯(lián)函數(shù)整合到槽命名中。 例如on_pushButton_clicked()就是由字符“on”和發(fā)射信號的部件對象名,還有信號名組成。這樣就可以去掉那個(gè)connect()關(guān)聯(lián)函數(shù)了。每當(dāng)pushButton被按下,就會(huì)發(fā)射clicked()信號,然后就會(huì)執(zhí)行on_pushButton_clicked()槽。文章來源:http://www.zghlxwxcb.cn/news/detail-799544.html
//對名稱為 pushButton_save 的按鈕進(jìn)行的 按下和釋放 動(dòng)作的槽函數(shù)
void frmTelBook::on_pushButton_save_pressed()
{
//
}
void frmTelBook::on_pushButton_save_released()
{
//
}
注意:一般自動(dòng)關(guān)聯(lián)方式的槽函數(shù)數(shù)目較少,選擇性叫少。文章來源地址http://www.zghlxwxcb.cn/news/detail-799544.html
到了這里,關(guān)于Qt 信號和槽機(jī)制的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!