在Qt中如何将单例实例连接到插槽?

时间:2010-11-01 07:57:43

标签: c++ qt singleton signals-slots

我在Qt Creator中编程并遇到了问题。我创建了一个单例类,我正在尝试将它连接到小部件中的一个插槽,但它不会返回指针 从Singleton::getInstance()开始,作为发出信号的同一实例。

我的代码如下:

class Widget : public QWidget
{        
    Q_OBJECT
    public:
         explicit Widget(QWidget *parent = 0);
         ~Widget();

    private slots:
         void setString(int var);
    }

实现:

connect(Singleton::getInstance(),SIGNAL(changeString(int)),this,SLOT(setString(int)));

单身类中的信号:

signals:
    void changeString(int var);

单例类中对信号的调用:

emit(Singleton::getInstance()->changeString(5));

信号发出时没有任何反应。调试器不会进入插槽。

4 个答案:

答案 0 :(得分:2)

很可能是插槽的不同方法签名 - setString(IMSS_Status);setString(int);

此外,如果是自定义类型,您应该调用

  

qRegisterMetaType< IMSS_Status&GT( “IMSS_Status”);

使用元类型系统正确注册。否则,排队的插槽执行将无法正常工作,例如。

答案 1 :(得分:0)

您的问题可能是由签名方法引起的。在使用插槽连接信号之前,应使用qRegisterMetaType<Your Class >("Class Definition name");

将信号定义到系统

是否是changeString签名的信号? “void changeString(int)”

我遇到了你的问题,我通过制作qRegisterMetaType并控制签名解决了我的问题。

答案 2 :(得分:0)

Singleton类是否也有Q_OBJECT宏?我不知道是否也需要它。

答案 3 :(得分:0)

我倾向于emit(Singleton::getInstance()->changeString(5));不正确。

应该从Singleton函数内部调用

emit,如下所示:

emit(changeString(5));

我很惊讶您发布的代码编译并在没有警告的情况下运行,我原本预计会有关于信号不存在的运行时错误。