十三 Qt自定义信号

目录

  • 一 自定义信号
  • 二、连接信号和槽QObject::connect
  • 三、发送信号 emit
  • 四、 自定义槽函数

前言

一 自定义信号

class MyWidget : public QWidget
{
	//1.使用信号时间必须使用Q_OBJECT
	Q_OBJECT
	
	//2.signals- 信号的专有修饰词
	signals:
		void MySignal(QString message);
}
  1. Q_OBJECT = moc编译器可以连接信号和槽函数
  2. 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:
在这里插入图片描述
指明定义的槽函数 十三 Qt自定义信号_第1张图片
全局函数 在这里插入图片描述
  1. 普通函数:
    就是按照普通成员函数定义
class
{
 public:
   void recSlot1(QMessage);
}
  1. slot函数
    需要使用 slots 标志,对比就是 signals
class
{
 public slots:
   void recSlot2(QMessage);
}
槽函数类型 说明
public slots 可以接受类以外的信号
protected slots 可以接受类本身和子类的信号
privated slots 可以接受类本身的信号
  1. 全局函数
    在全局下定义全局函数
//全局空间
 void  recSlot3(QMessage);
  1. connect 链接三种消息
//类的成员函数作为槽函数
QObject::connect(&mywidget,&MyWidget::MySignal,&mywidget,&MyWidget::recSlot1);
//信号函数和槽函数相连接
QObject::connect(&mywidget,&MyWidget::MySignal,&mywidget,&MyWidget::recSlot2);
//全局函数作为槽函数
QObject::connect(&mywidget,&MyWidget::MySignal,&recSlot3);

你可能感兴趣的:(Qt教程,qt,开发语言,c++)