gpt4 book ai didi

c++ - Qt:如何将来自不同类的静态信号连接到插槽?

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:16 24 4
gpt4 key购买 nike

那么假设我有一个常规 Qt 类 MyQtClass 和一个只有静态成员的类 MyClass。如果我想访问 MyQtClass 的 ui,我必须使用 Signals and Slots。所以我创建了一个静态信号(静态的,所以我可以像 MyClass::mySignal(); 一样调用它)和 Qt 类中的一个插槽。我怎样才能将来自 MyClass 的静态信号与来自 Qt 类的插槽连接起来,而不需要 MyClass 的对象,因为它只有静态成员?我知道只有静态成员的类在 C++ 中不被认为是一个好的设计,但我现在对这个项目的了解太深了,我想知道是否有办法只用静态成员来实现。提前致谢!代码:我的Qt类.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;
};

我的类.h:

#pragma once
#include <QtWidgets/QMainWindow>

class MyClass : public QObject
{
public:
static void myFunction1();
static void myFunction2();
/*--- More Stuff ---*/


Q_SIGNAL static void mySignal();
};

最佳答案

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"

关于c++ - Qt:如何将来自不同类的静态信号连接到插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54154656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com