C ++ DLL和QT GUI之间的通信

时间:2016-09-05 15:13:01

标签: c++ multithreading qt user-interface dll

对你们所有人来说,美好的一天,无论谁看到我的问题。 我有一个dll,它是用c ++和一些GUI QT项目编写的。当调用时,dll函数在此周期中发送数据包:

for (int offset = 0; offset < filelen; offset += 4)
{
    for (int i = 0; i < 4 ; i++)
    {
        FPGA_Packet.DATA[i] = (program_data[i + offset];
    }
    if ( SOCKET_ERROR == ( send(mysocket, (char*)&FPGA_Packet, 8, 0) ))
    {
        error = WSAGetLastError();
        return error;
    }
}

问题是,当我打电话给&#34;发送&#34;我需要每次通过偏移量增加进度条。功能。问题是 - 如何在GUI和DLL之间建立连接?我必须使用插槽和信号,或者我可以使用&#34; connect&#34;线程功能,还是有更简单或更难的选择?我需要在表单上给DLL指针,或者以某种方式使用get / set?我会提供任何建议,链接,示例和所有其他帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

你必须从你的函数发出一个信号(或者如果我们谈论MVC模式实现,最好说一个模型)并在你的视图类中捕获它。这是一个代码片段(我使用QML进行GUI开发,但无论如何都必须明确这个想法):

   QObject * const callViewObject = getView()->getSlotsSignalsObject();

   bool isSlotSignalConnected = false;

   isSlotSignalConnected = QObject::connect( this,
                                             SIGNAL( clearViewSignal() ),
                                             callViewObject,
                                             SLOT( clearViewSlot() ) );

其中,getView() - &gt; getSlotsSignalsObject()以下列方式实现:

QObject * const QmlViewBase::getSlotsSignalsObject() const
{
   return reinterpret_cast<QObject* const >( m_declarativeView->rootObject() );
}

要声明信号,您必须在班级中使用以下定义:

   signals:

   void clearView();

请不要忘记,如果您的课程使用信号插槽功能,您必须将Q_OBJECT宏放入其中。