我有一个导出插槽和函数的dll,我也有一些从dll中的一些私有函数发出的信号。如果这对任何事都有帮助,那么dll就是一个COM组件。
首先我导出了完整的QT类,当我在Visual Studio 2010中添加引用时可以看到我的公共插槽和功能,但是我看不到信号(不知道我是否应该这样做)。它们以“Q_SIGNALS”声明。
我想要的是将这些信号中的一个连接到我的C#项目中的方法,就像QT中的插槽信号,但现在我需要“信号(QT)”到“方法(C#)”之类的东西,是这可能吗?任何帮助表示赞赏。
C++ (Qt)
signals:
void mySignal(const QString& path);
应该连接到:
C# (VS2010)
void myFunction(string path);
答案 0 :(得分:1)
您在导出的Qt类中看不到信号,因为它们不是该类的函数。它不是任何类型的C(++)声明。只是命名占位符,Qt预处理器用于生成调用代码,以防信号实际连接到某处。根据线程上下文,信号可以变成两个不同但简单的东西。信号发送对象是否与接收对象位于同一个线程中:
因此,对于案例1,您实际上根本不需要Qt语法糖。只需从Qt中调用您的C#方法,即可emit mySignal()
。但是,情况2不能像Qt那样简单地完成,因为接收器必须继承QObject(我不知道在C#中是否可能)。您仍然可以使用处理程序滚动自己的消息循环,但Qt不会帮助您。