小编sng*_*sng的帖子

连接接口中声明的QT信号

如果在接口中声明信号,有没有办法使用Qt5样式的信号和插槽连接?

我的界面:

class IMyInterfaces{
protected:
    IMyInterfaces() {} //Prohibit instantiate interfaces
public:
    virtual ~IMyInterfaces(){} 

signals:
    virtual void notify_signal() =0;
};
Q_DECLARE_INTERFACE(IMyInterfaces, "IMyInterfaces");
Run Code Online (Sandbox Code Playgroud)

以及实现上述接口的类:

class MyClass : public QObject, public IMyInterfaces{
    Q_OBJECT
    Q_INTERFACES(IMyInterfaces) //Indicates interface implements
public:
    MyClass():QObject(){
    }
    ~MyClass(){}

signals:
     void notify_signal();
};
Run Code Online (Sandbox Code Playgroud)

在主程序中,我想做这样的事情:

IMyInterfaces * myObject = new MyClass();
//Connect signal using Qt5 style (This will introduce compilation errors)
connect(myObject ,&IMyInterfaces::notify_signal, otherObject, &OtherClass::aSlot);
Run Code Online (Sandbox Code Playgroud)

旧样式有效,但需要强制转换为QObject:

QObject::connect(dynamic_cast<QObject *>(m),SIGNAL(notify_signal()),other,SLOT(aSlot())); //This works but need to cast to QObject. 
Run Code Online (Sandbox Code Playgroud)

c++ qt interface signals-slots

6
推荐指数
1
解决办法
1473
查看次数

标签 统计

c++ ×1

interface ×1

qt ×1

signals-slots ×1