• 4447阅读
  • 1回复

求教,关于QThread和QMetaObject的相关问题 [复制链接]

上一主题 下一主题
离线winmo
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-14
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
求教一个关于thread 和 widget的问题。

比如我在main thread有一个GUI Widget, 然后当有second thread的时候,打开另一个窗口去接受消息,就是又开了一个second GUI  widget。

QT里面,似乎只有在main thread的时候,才能开一个widget。
当然second widget 是属于 main widget的。

How do I update the GUI created on the main thread using data retrieved on the second thread?

我现在尝试用QMetaObject::invokeMethod() , 但是还是不行,
不知道出错在哪里。。。

int Client::receiveMessage(struct ns__Message message)
{
    LOG_TRACE("Client::receiveMessage start");
    if (message.m_clientID2 == clientID){
        QMetaObject::invokeMethod(ui_ChatDialog.showTextEdit,"on_receiveMessage",Qt::QueuedConnection,Q_RETURN_ARG(struct ns__Message,message));}    return SOAP_OK;
}

void Client::on_receiveMessage(struct ns__Message message)
{
    LOG_TRACE("Client::on_receiveMessage start");
    
    ui_ChatDialog.showTextEdit->append(QString("[%1] %2 %3\n ")
                        .arg(message.m_clientID1.c_str())
                        .arg(QString("says:"))
                        .arg(message.m_message.c_str()));    
}
离线zhgn

只看该作者 1楼 发表于: 2009-11-16
我之前用QThread时,发现它会阻塞掉主线程。也可能是我用的不对

你可以看一下你那边Qthread中有没有什么耗时间的操作。
快速回复
限100 字节
 
上一个 下一个