Qt信号与槽(四种写法)

学习记录:分析Qt信号与槽的四种不同写法

目录

一、UI直接绑定

二、用宏的形式绑定

三、用指针的形式绑定

四、Lambda表达式绑定

五、源代码


一、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文件,注意控件名称要对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值