繁体   English   中英

Qt:如何将不同类别的静态信号连接到插槽?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM