自定义信号与槽
自定义信号与槽是实现对象间通信的一种机制,比如按钮和窗口间的通信。
一、定义信号
Signal关键字声明的类成员函数。不需要实现,只需要声明。
signals:
void mySignals();//定义信号,不用实现
二、定义槽
可以使任何普通成员函数,类定义中使用关键字slot标识,有返回类型,可接受参数。参数需要与信号发出的参数类型匹配。
信号带参数的情况下,槽可以无参数。
private slots:
void mySlots();//头文件定义槽
void Widget::mySlots()//.cpp实现
{
std::cout << "mySlot" << std::endl;
}
三、连接信号与槽
使用QObject::connect
connect(this,SIGNAL(mySignals()),this,SLOT(mySlots()));
四、发射信号
使用emit关键字发射信号
emit mySignals();//发送信号,可见
五、完整代码
无参与有参
在这里插入代码片#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <iostream>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
signals:
void mySignals();//定义信号,不用实现
void mySignalsWithPara(int value);//带参数
private slots:
void mySlots();//定义槽
void mySlotsWithPara(int value);//带参数
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
connect(this,SIGNAL(mySignals()),this,SLOT(mySlots()));
connect(this,SIGNAL(mySignalsWithPara(int)),this,SLOT(mySlotsWithPara(int)));
emit mySignals();//发送信号,可见
emit mySignalsWithPara(100);//发送信号,可见
}
Widget::~Widget()
{
delete ui;
}
void Widget::mySlots()
{
std::cout << "mySlot" << std::endl;
}
void Widget::mySlotsWithPara(int value)
{
// std::cout << "mySlotWithPara " << std::endl;
// std::cout << value << std::endl;
qDebug() << "mySlotWithPara " ;
q Debug() << value ;
}