对你们所有人来说,美好的一天,无论谁看到我的问题。 我有一个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?我会提供任何建议,链接,示例和所有其他帮助。谢谢。
答案 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
宏放入其中。