我在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));
信号发出时没有任何反应。调试器不会进入插槽。
答案 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));
我很惊讶您发布的代码编译并在没有警告的情况下运行,我原本预计会有关于信号不存在的运行时错误。