Ich bin neu in Qt, und ich entwickle eine Windows-Anwendung mit Qt 5.3.1. Ich habe ein Hauptfenster (genannt Fenster A), das Besprechungsereignisse von SOCKET IO Server abhören und alle aktiven Besprechungen darin auflisten wird. Wenn ein Benutzer auf ein Meeting klickt, wird das Hauptfenster ausgeblendet und ein Fenster (Fenster B) geöffnet, um dem Meeting beizutreten. Zur gleichen Zeit hört Fenster A immer noch Besprechungsereignisse ab und fügt neue eingehende Besprechungsanfragen hinzu. Fenster A funktioniert gut, wenn es aktiv ist. Aber wenn ich Fenster B öffnen und neue Besprechungsanfragen kommen, können neue Besprechungsanfragen zeigen nicht innerhalb des Fensters A.Kann keine neuen Inhalte im Fenster anzeigen, die im Hintergrund hinzugefügt werden
Ich verwende ein individuelles Widget und das Layout Treffen in zwei Spalten zu zeigen. Wie oben im Screenshot gezeigt, werden die Besprechungen 1, 3 und 4 erstellt, wenn Fenster A aktiv ist, während Besprechung 2 erstellt wird, wenn Fenster A ausgeblendet ist. Ich habe ein Widget mit dem Namen MeetingListView erstellt, um Meetings anzuzeigen, und wenn Window A wieder aktiv ist, wird der Slot forceUpdateUI von MeetingListView aufgerufen. Im Folgenden sind forceUpdateUI Quellcode:
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();
}
Es ist jedoch überhaupt nicht funktionieren.
Letzte Aktualisierung: Ich habe eine Layout-Klasse von QGridLayout, anstelle von QLayout erben erstellt, jetzt wurde das Problem gelöst. Vielen Dank.