Qt中信号带参传值

在我们的Qt信号中是可以进行参数的传递的,不过格式上与写普通函数不同。

这是头文件中定义一个含参信号和一个含参槽函数

我们再来看它们两个的绑定 。第一行的clicked()和on_btn_clicked()就是普通无参信号和槽的绑定;第二行就是上图中两个带参信号和槽函数的绑定,要注意的是,我们只要写出参数类型,而不需要写对象。但定义的时候是要写出具体的形参对象的。

我们还可以写成新版信号与槽的连接形式

cpp 复制代码
// 格式:connect(sender, &SenderClass::signalName, receiver, &ReceiverClass::slotName);
connect(this, &Widget::sendMessage, this, &Widget::receiveMessage);

实例:

widget.h

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QVBoxLayout>

#include "smainwidget.h"

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private:
    QPushButton *btn;
    QLineEdit *edit;
    QLabel *lab;

    QVBoxLayout *layout;

signals:
    void sendMessage(QString text);

public slots:
    void receiveMessage(QString text);
    void on_btn_clicked();
};

#endif // WIDGET_H

widget.cpp

cpp 复制代码
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->btn=new QPushButton();
    this->btn->setText("按钮");
    this->edit=new QLineEdit();
    this->lab=new QLabel();

    this->layout=new QVBoxLayout();
    this->layout->addWidget(this->btn);
    this->layout->addWidget(this->edit);
    this->layout->addWidget(this->lab);

    this->setLayout(this->layout);

    connect(this->btn,SIGNAL(clicked()),this,SLOT(on_btn_clicked()));
    connect(this,SIGNAL(sendMessage(QString)),this,SLOT(receiveMessage(QString)));
}

Widget::~Widget()
{

}

void Widget::receiveMessage(QString text)
{
    this->lab->setText(text);
}

void Widget::on_btn_clicked()
{
    emit sendMessage(this->edit->text());
}

结果:

相关推荐
江湖人称菠萝包11 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter9-Qt Charts
笔记·qt·qt5
扶尔魔ocy11 小时前
【QT android】环境安装及第一个QT项目
qt·andriod开发
江湖人称菠萝包14 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter10-Data Visualization
笔记·qt·qt5
Cx330❀19 小时前
Qt 常用控件属性与底层机制详解:从窗口半透明、浮点数陷阱到 QSS 与焦点策略
qt·ui·图形渲染
Quz19 小时前
QML DelegateChooser:多条件组合与按列选择委托
qt
Quz19 小时前
QML DelegateChooser:按角色选择委托与按索引选择委托
qt
Cx330❀19 小时前
Qt 常用 UI 控件详解:从QPushButton到QLabel 核心用法解析
qt·ui·图形渲染
实心儿儿2 天前
Qt — 信号和槽
qt
江湖人称菠萝包2 天前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter8-绘图
笔记·qt·qt5
西西弗Sisyphus2 天前
Qt 实现一个 水波进度球
c++·qt·c