前言
一 自定义信号
class MyWidget : public QWidget
{
//1.使用信号时间必须使用Q_OBJECT
Q_OBJECT
//2.signals- 信号的专有修饰词
signals:
void MySignal(QString message);
}
- Q_OBJECT = moc编译器可以连接信号和槽函数
- signals: 信号专用词。必须有signals。但是Qt5不一定有public slots:
内容 | 说明 |
---|---|
1.定义在某个类里面 | QObject::connect(&myWidget,&MyWidget::MySignal,) 消息发送者必须来自对象 |
2.使用signals关键字修饰 | signals: void MySignal(QMessage message); |
3.函数仅需要声明,不需要定义 | |
4.信号和槽都是void返回值 | 信号:void MySignal(QMessage message); 槽函数:void recSlot1(QString mess) {;} |
5.signals | 是qt自定义的标志 |
二、连接信号和槽QObject::connect
QObject::connect(&myWidget,&MyWidget::MySignal,信号接收者,槽函数)
三、发送信号 emit
void function()
{
//把自己需要传递的信息发送出去
emit MySignal(message);
}
上述的字符串变量message是会发送给槽函数的
四、 自定义槽函数
可以定义三种槽函数
槽函数类型 | 说明 |
---|---|
普通成员函数 | public: ![]() |
指明定义的槽函数 | ![]() |
全局函数 | ![]() |
- 普通函数:
就是按照普通成员函数定义
class
{
public:
void recSlot1(QMessage);
}
- slot函数
需要使用 slots 标志,对比就是 signals
class
{
public slots:
void recSlot2(QMessage);
}
槽函数类型 | 说明 |
---|---|
public slots | 可以接受类以外的信号 |
protected slots | 可以接受类本身和子类的信号 |
privated slots | 可以接受类本身的信号 |
- 全局函数
在全局下定义全局函数
//全局空间
void recSlot3(QMessage);
- connect 链接三种消息
//类的成员函数作为槽函数
QObject::connect(&mywidget,&MyWidget::MySignal,&mywidget,&MyWidget::recSlot1);
//信号函数和槽函数相连接
QObject::connect(&mywidget,&MyWidget::MySignal,&mywidget,&MyWidget::recSlot2);
//全局函数作为槽函数
QObject::connect(&mywidget,&MyWidget::MySignal,&recSlot3);