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(&myWidget,&MyWidget::MySignal,信号接收者,槽函数)
void function()
{
//把自己需要传递的信息发送出去
emit MySignal(message);
}
上述的字符串变量message是会发送给槽函数的
可以定义三种槽函数
槽函数类型 | 说明 |
---|---|
普通成员函数 | public: ![]() |
指明定义的槽函数 | ![]() |
全局函数 | ![]() |
class
{
public:
void recSlot1(QMessage);
}
class
{
public slots:
void recSlot2(QMessage);
}
槽函数类型 | 说明 |
---|---|
public slots | 可以接受类以外的信号 |
protected slots | 可以接受类本身和子类的信号 |
privated slots | 可以接受类本身的信号 |
//全局空间
void recSlot3(QMessage);
//类的成员函数作为槽函数
QObject::connect(&mywidget,&MyWidget::MySignal,&mywidget,&MyWidget::recSlot1);
//信号函数和槽函数相连接
QObject::connect(&mywidget,&MyWidget::MySignal,&mywidget,&MyWidget::recSlot2);
//全局函数作为槽函数
QObject::connect(&mywidget,&MyWidget::MySignal,&recSlot3);