柚子快報(bào)激活碼778899分享:Qt信號(hào)與槽(四種寫法)
柚子快報(bào)激活碼778899分享:Qt信號(hào)與槽(四種寫法)
學(xué)習(xí)記錄:分析Qt信號(hào)與槽的四種不同寫法
目錄
一、UI直接綁定
二、用宏的形式綁定
三、用指針的形式綁定
四、Lambda表達(dá)式綁定
五、源代碼
一、UI直接綁定
簡單繪制一個(gè)UI,通過UI直接綁定給打開按鈕綁定信號(hào)與槽,右鍵打開按鈕,點(diǎn)擊轉(zhuǎn)到槽
這個(gè)列表是按鈕可以發(fā)出的信號(hào),點(diǎn)擊clicked()信號(hào)
系統(tǒng)自動(dòng)在.cpp文件生成槽函數(shù),并且在.h中也自動(dòng)生成了函數(shù)聲明
在槽函數(shù)中執(zhí)行響應(yīng)的操作,我這里是實(shí)現(xiàn)類似Windows下的cmd窗口跳轉(zhuǎn)功能
#include "widget.h"
#include "ui_widget.h"
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_commitButton_clicked()
{
// 獲取lineedit數(shù)據(jù)
QString program = ui->cmdLineEdit->text();
// 創(chuàng)建Process對(duì)象
QProcess *myProcess = new QProcess(this);
myProcess->start(program);
}
二、用宏的形式綁定
信號(hào)發(fā)出者(文本框?qū)ο螅簎i->cmdLineEdit
信號(hào):returnPressed()
信號(hào)接收者(this在這里代表widget對(duì)象):this
槽函數(shù):on_commitButton_clicked()
// 2.用宏的形式綁定
// 信號(hào):文本輸入框的內(nèi)容輸入完成,點(diǎn)擊回車鍵觸發(fā)
// 槽函數(shù):模擬cmd命令行(與點(diǎn)擊打開按鈕槽函數(shù)相同)
connect(ui->cmdLineEdit,SIGNAL(returnPressed()),this,SLOT(on_commitButton_clicked()));
三、用指針的形式綁定
信號(hào)發(fā)出者(按鈕對(duì)象):ui->cancelButton
信號(hào):clicked
信號(hào)接收者(this在這里代表widget對(duì)象):this
槽函數(shù):on_cancelButton_clicked()
// 3.用指針的形式綁定
// 信號(hào):點(diǎn)擊取消按鈕
// 槽函數(shù):關(guān)閉窗口
connect(ui->cancelButton,&QPushButton::clicked,this,&Widget::on_cancelButton_clicked);
四、Lambda表達(dá)式綁定
信號(hào)發(fā)出者(按鈕對(duì)象):ui->browseButton
信號(hào):clicked
信號(hào)接收者(this在這里代表widget對(duì)象):this
槽函數(shù):Lambda表達(dá)式
// 4.Lambda表達(dá)式綁定
// 信號(hào):點(diǎn)擊瀏覽按鈕
// 槽函數(shù):出現(xiàn)一個(gè)彈窗
connect(ui->browseButton, &QPushButton::clicked, [this]()
{
QMessageBox::information(this,"信息","點(diǎn)擊瀏覽");
});
五、源代碼
main.cpp
#include "widget.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_commitButton_clicked();
void on_cancelButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 2.用宏的形式綁定
// 信號(hào):文本輸入框的內(nèi)容輸入完成,點(diǎn)擊回車鍵觸發(fā)
// 槽函數(shù):模擬cmd命令行(與點(diǎn)擊打開按鈕槽函數(shù)相同)
connect(ui->cmdLineEdit,SIGNAL(returnPressed()),this,SLOT(on_commitButton_clicked()));
// 3.用指針的形式綁定
// 信號(hào):點(diǎn)擊取消按鈕
// 槽函數(shù):關(guān)閉窗口
connect(ui->cancelButton,&QPushButton::clicked,this,&Widget::on_cancelButton_clicked);
// 4.Lambda表達(dá)式綁定
// 信號(hào):點(diǎn)擊瀏覽按鈕
// 槽函數(shù):出現(xiàn)一個(gè)彈窗
connect(ui->browseButton, &QPushButton::clicked, [this]()
{
QMessageBox::information(this,"信息","點(diǎn)擊瀏覽");
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_commitButton_clicked()
{
// 獲取lineedit數(shù)據(jù)
QString program = ui->cmdLineEdit->text();
// 創(chuàng)建Process對(duì)象
QProcess *myProcess = new QProcess(this);
myProcess->start(program);
}
void Widget::on_cancelButton_clicked()
{
this->close();
}
UI文件,注意控件名稱要對(duì)應(yīng)
柚子快報(bào)激活碼778899分享:Qt信號(hào)與槽(四種寫法)
文章來源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。