学习记录:分析Qt信号与槽的四种不同写法
目录
一、UI直接绑定
简单绘制一个UI,通过UI直接绑定给打开按钮绑定信号与槽,右键打开按钮,点击转到槽
这个列表是按钮可以发出的信号,点击clicked()信号
系统自动在.cpp文件生成槽函数,并且在.h中也自动生成了函数声明
在槽函数中执行响应的操作,我这里是实现类似Windows下的cmd窗口跳转功能
#include "widget.h"
#include "ui_widget.h"
#include <QProcess>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_commitButton_clicked()
{
// 获取lineedit数据
QString program = ui->cmdLineEdit->text();
// 创建Process对象
QProcess *myProcess = new QProcess(this);
myProcess->start(program);
}
二、用宏的形式绑定
信号发出者(文本框对象):ui->cmdLineEdit
信号:returnPressed()
信号接收者(this在这里代表widget对象):this
槽函数:on_commitButton_clicked()
// 2.用宏的形式绑定
// 信号:文本输入框的内容输入完成,点击回车键触发
// 槽函数:模拟cmd命令行(与点击打开按钮槽函数相同)
connect(ui->cmdLineEdit,SIGNAL(returnPressed()),this,SLOT(on_commitButton_clicked()));
三、用指针的形式绑定
信号发出者(按钮对象):ui->cancelButton
信号:clicked
信号接收者(this在这里代表widget对象):this
槽函数:on_cancelButton_clicked()
// 3.用指针的形式绑定
// 信号:点击取消按钮
// 槽函数:关闭窗口
connect(ui->cancelButton,&QPushButton::clicked,this,&Widget::on_cancelButton_clicked);
四、Lambda表达式绑定
信号发出者(按钮对象):ui->browseButton
信号:clicked
信号接收者(this在这里代表widget对象):this
槽函数:Lambda表达式
// 4.Lambda表达式绑定
// 信号:点击浏览按钮
// 槽函数:出现一个弹窗
connect(ui->browseButton, &QPushButton::clicked, [this]()
{
QMessageBox::information(this,"信息","点击浏览");
});
五、源代码
main.cpp
#include "widget.h"
#include <QApplication>
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 <QWidget>
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 <QProcess>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 2.用宏的形式绑定
// 信号:文本输入框的内容输入完成,点击回车键触发
// 槽函数:模拟cmd命令行(与点击打开按钮槽函数相同)
connect(ui->cmdLineEdit,SIGNAL(returnPressed()),this,SLOT(on_commitButton_clicked()));
// 3.用指针的形式绑定
// 信号:点击取消按钮
// 槽函数:关闭窗口
connect(ui->cancelButton,&QPushButton::clicked,this,&Widget::on_cancelButton_clicked);
// 4.Lambda表达式绑定
// 信号:点击浏览按钮
// 槽函数:出现一个弹窗
connect(ui->browseButton, &QPushButton::clicked, [this]()
{
QMessageBox::information(this,"信息","点击浏览");
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_commitButton_clicked()
{
// 获取lineedit数据
QString program = ui->cmdLineEdit->text();
// 创建Process对象
QProcess *myProcess = new QProcess(this);
myProcess->start(program);
}
void Widget::on_cancelButton_clicked()
{
this->close();
}
UI文件,注意控件名称要对应