首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在添加到后台的窗口中显示新内容

无法在添加到后台的窗口中显示新内容
EN

Stack Overflow用户
提问于 2016-05-26 15:58:36
回答 1查看 30关注 0票数 1

我是Qt新手,我正在用Qt 5.3.1开发一个windows应用程序。我有一个主窗口(称为窗口A),它将监听来自SOCKET IO服务器的会议事件,列出其中的所有活动会议。当用户点击会议时,主窗口将隐藏,并打开一个窗口(称为窗口B)来加入会议。同时,窗口A仍在侦听会议事件,并将添加新的传入会议请求。当窗口A处于活动状态时,它运行良好。但是当我打开窗口B,新的会议请求到来时,新的会议请求不能在窗口A中显示。

我正在使用一个自定义的小部件和布局来显示2列中的会议。如上面的屏幕截图所示,会议1、3和4是在窗口A活动时创建的,而会议2是在窗口A隐藏时创建的。我创建了一个名为MeetingListView的小部件来显示会议,当窗口A再次处于活动状态时,将调用MeetingListView的slot forceUpdateUI。下面是forceUpdateUI的源代码:

代码语言:javascript
复制
 void MeetingListView::forceUpdateUI(){
        qDebug()<<"MeetingListView::forceUpdateUI count="<<mMeetingList.length();
        int count = mLayout->count();
        for(int i=count-1; i>=0; i--){
            //Remove all meeting items
            MeetingItem *item = (MeetingItem*)(mLayout->itemAt(i)->widget());
            item->setParent(nullptr);
            mLayout->removeItem(i);
        }
        for(int i=0; i<mMeetingList.length(); i++){
            //Add all meeting items again
            MeetingItem *item = mMeetingList.at(i);
            mLayout->addWidget(item);
        }
        mLayout->update();
    }    

然而,它根本不起作用。

最新更新:我创建了一个从QGridLayout继承的布局类,而不是QLayout,现在问题已经解决了。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-05-26 17:08:25

我认为这是因为每个窗口都有自己的事件循环。从A回调进入B的事件循环会阻止A的循环继续。

您必须启动B的非模式版本,然后从A的回调中返回,以使循环继续(或在另一个线程中手动启动B窗口)。

您可以在显示B窗口时隐藏A窗口,以防止用户打开其他B窗口(因为A循环仍处于活动状态)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37454887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档