在Qt中,自定义信号与槽是实现对象间通信的一种机制。信号和槽是Qt对象通信的核心特性,使得一个 对象能够在发生某种事件时通知其他对象。自定义信号与槽的实现步骤如下:
定义信号:在Qt中,信号是由 signals 关键字声明的类成员函数。它们不需要实现,只需声明。
class MyClass : public QObject {
Q_OBJECT
public:
MyClass();
signals:
void mySignal(int value);//信号
};
在上面的例子中, MyClass 有一个名为 mySignal 的信号,它带有一个整型参数。
定义槽:槽可以是任何普通的成员函数,但通常在类定义中用 slots 关键字标识。槽可以有返回类型, 也可以接受参数,但它们的参数类型需要与发出信号的参数类型匹配。
class MyClass : public QObject {
Q_OBJECT
public slots:
void mySlot(int value);
}
连接信号与槽:使用 QObject::connect 函数将信号与槽连接起来。当信号被发射时,连接到这个信号 的槽将被调用。
MyClass *myObject = new MyClass();
connect(myObject, SIGNAL(mySignal(int)), myObject, SLOT(mySlot(int)));
这行代码连接了 myObject 的 mySignal 信号到同一个对象的 mySlot 槽。
发射信号:使用 emit 关键字发射信号。当信号被发射时,所有连接到这个信号的槽都会被调用。
emit mySignal(123);
这将触发所有连接到 mySignal 的槽。
例子:
signals:
void mysignal();
private slots:
void myslot();
connect(this,SIGNAL(mysignal()),this,SLOT(myslot()));
emit mysignal();
void Widget::myslot()
{
qDebug()<<"欢迎光临!!!";
}
一运行程序就会自动打印:欢迎光临!!!
带参数
signals:
void mysignal(int value);
private slots:
void myslot(int value);
connect(this,SIGNAL(mysignal(int)),this,SLOT(myslot(int)));
emit mysignal(2);
void Widget::myslot(int value)
{
qDebug()<<"欢迎光临!!!"<<value<<"人";
}
标签:mySignal,自定义,int,void,mysignal,信号,MyClass From: https://blog.csdn.net/m0_62407354/article/details/142965563