原理:与C++语法一致,信号、槽函数都可以发生重载,使其在名称不变的情况下,传递过程可以携带参数。
示例说明:我们从一个最普通的信号槽工程中,来修改,对信号、槽进行重载,使信号、槽携带参数。
1. 普通信号 - 工程源码
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPushButton> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); void sendSignalSlot(); void dealSignalSlot(); signals: /* * 信号必须有signals关键字来声明 * 信号没有返回值,但可以有参数 * 信号就是函数的声明,只需声明,无需定义 * 使用:emit mySignal(); * 信号可以重载 */ void mySignal(); private: QPushButton btn1; }; #endif // WIDGET_H
widget.cpp
#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { btn1.setParent(this); btn1.setText("sendText"); btn1.resize(80,25); btn1.move(100,100); resize(320, 240); setWindowTitle("Hello!"); connect(&btn1, &QPushButton::clicked, this, &Widget::sendSignalSlot); connect(this, &Widget::mySignal, this, &Widget::dealSignalSlot); } void Widget::sendSignalSlot() { emit mySignal(); } void Widget::dealSignalSlot() { btn1.setText("Done!"); } Widget::~Widget() { }
现象:
- 点击 "sendText" 按钮,按钮文字变为 "Done!"。
![]()

本文详细介绍了Qt中信号与槽机制的原理及应用,包括信号与槽的基础使用、信号与槽的重载、带参数的信号与槽的使用方法等。


1688

被折叠的 条评论
为什么被折叠?



