[英]Qt: How to connect static signal from different class to slot?
因此,假设我有一个常规的Qt类MyQtClass
和一个仅具有静态成员的类MyClass
。 如果要访问MyQtClass
的ui, MyQtClass
必须使用Signals和Slots。 因此,我创建了一个静态Signal(静态,所以我可以像MyClass::mySignal();
那样调用它)和Qt类中的一个插槽。 我如何将MyClass的静态信号与Qt类的插槽连接,而没有MyClass
对象,因为它只有静态成员? 我知道在C ++中,仅具有静态成员的类并不被认为是一种好的设计,但是到目前为止,我对这个项目太了解了,我想知道是否有一种方法可以只对静态成员进行操作。 提前致谢! 代码:MyQtClass.h:
#include "ui_MyQtClass.h"
class MyQtClass : public QMainWindow
{
Q_OBJECT
public:
MyQtClass(QWidget *parent = Q_NULLPTR);
Q_SLOT void mySlot();
private:
Ui::MyQtClassClass ui;
};
MyClass.h:
#pragma once
#include <QtWidgets/QMainWindow>
class MyClass : public QObject
{
public:
static void myFunction1();
static void myFunction2();
/*--- More Stuff ---*/
Q_SIGNAL static void mySignal();
};
如该线程所示,由于它总是与QObject
关联,因此不可能发出静态信号,作为替代,它们会创建一个单例,该单例等于您想要的单例。
#include <QtCore>
class Receiver: public QObject
{
Q_OBJECT
public:
using QObject::QObject;
Q_SLOT void mySlot(){
qDebug()<< __PRETTY_FUNCTION__;
QCoreApplication::quit();
}
};
class Sender: public QObject
{
Q_OBJECT
using QObject::QObject;
public:
static Sender& instance(){
static Sender m_instance;
return m_instance;
}
static void myFunction1(){
emit instance().mySignal();
}
Q_SIGNAL void mySignal();
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Receiver r;
QObject::connect(&Sender::instance(), &Sender::mySignal, &r, &Receiver::mySlot);
QTimer::singleShot(1000, &Sender::myFunction1);
return a.exec();
}
#include "main.moc"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.