因此,让我们假设我有一个普通的Qt类MyQtClass
和一个MyClass
类,只包含静态成员。如果要访问MyQtClass
的用户界面,则必须使用信号和插槽。因此,我创建了一个静态Signal(静态,所以我可以像MyClass::mySignal();
一样调用它)和Qt类中的一个插槽。由于对象只有静态成员,如何在没有对象MyClass
的情况下将MyClass的静态信号与Qt类的插槽连接起来?
我知道在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();
};
答案 0 :(得分:0)
如this thread中所述,由于它总是与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"