使用C#应用程序连接dll中的Qt信号

时间:2012-08-07 10:07:44

标签: c# qt dll signals

我有一个导出插槽和函数的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);

1 个答案:

答案 0 :(得分:1)

您在导出的Qt类中看不到信号,因为它们不是该类的函数。它不是任何类型的C(++)声明。只是命名占位符,Qt预处理器用于生成调用代码,以防信号实际连接到某处。根据线程上下文,信号可以变成两个不同但简单的东西。信号发送对象是否与接收对象位于同一个线程中:

  1. 它确实:编译为简单的直接方法调用
  2. 它不会:插槽调用存储在接收方的消息队列中,并在接收方的线程返回消息循环时执行。然后,“插槽”也被称为“事件处理程序”
  3. 因此,对于案例1,您实际上根本不需要Qt语法糖。只需从Qt中调用您的C#方法,即可emit mySignal()。但是,情况2不能像Qt那样简单地完成,因为接收器必须继承QObject(我不知道在C#中是否可能)。您仍然可以使用处理程序滚动自己的消息循环,但Qt不会帮助您。