Qtが新しく、Qt 5.3.1でWindowsアプリケーションを開発しています。私はメインウィンドウ(ウィンドウAと呼ばれる)を持っています。これはSOCKET IOサーバーからの会議のイベントを聞き、その中のすべてのアクティブな会議を一覧表示します。ユーザーが会議をクリックすると、メインウィンドウが非表示になり、ウィンドウ(ウィンドウB)が開いて会議に参加します。同時に、ウィンドウAは依然として会議のイベントを待ち受けており、新しい着信会議の要求を追加します。ウィンドウAは、アクティブなときにうまく動作します。私は、ウィンドウBを開き、新しい会議出席依頼が来たときにでも、新しい会議出席依頼は、私は2列の会議を表示するようにカスタマイズウィジェットやレイアウトを使用していますウィンドウに新しいコンテンツを表示できません。
ウィンドウA.以内に表示することはできません。 上記のスクリーンショットのように、ウィンドウAがアクティブな場合に会議1,3および4が作成され、ウィンドウAが非表示の場合に会議2が作成されます。 ミーティングを表示するMeetingListViewというウィジェットを作成しました。ウィンドウAが再びアクティブになると、MeetingListViewのスロットforceUpdateUIが呼び出されます。
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();
}
しかし、それがすべてでは動作しません: 以下はforceUpdateUIソースコードです。
最新の更新: QLayoutではなくQGridLayoutから継承するレイアウトクラスを作成しましたが、問題は解決されました。ありがとう。