[英]Qt: Update widgets that are hidden before they are then shown?
我有兩個QDialog堆疊在一起,其中一些數據在每個對話框的布局中顯示在一個QWidget中顯示(一個小部件以圖形方式顯示一個計數)。
在當前顯示的QDialog中,用戶可以更改該數據。 此更改將傳播到兩個小部件,並在當前QDialog中顯示正確的計數。 但是,當用戶關閉該QDialog,並且下面的那個變為可見時,顯示計數的QWidget會顯示舊值,然后再更新為正確的值。
我知道下面的QWidget在顯示其他QDialog之前具有正確的值,但我似乎無法讓Dialog 在可見之前更新。 我試過這個,但仍然隱藏着:
hiddenDialog->layout()->activate()
hiddenDialog->layout()->update()
但是在顯示對話框之后,它仍然無法實際更新。 我的問題似乎與Qt有關:如何強制隱藏的小部件來計算其布局? ,除了我想在設置Qt :: WA_DontShowOnScreen后顯示QDialog。 打開Qt :: WA_DontShowOnScreen並更新對話框后,我嘗試設置:
dialog->setAttribute(Qt::WA_DontShowOnScreen, false);
dialog->show()
但對話框仍未顯示在屏幕上。 有沒有辦法讓它再次可見? 或者是否有一些方法可以讓對話框和窗口小部件在被其他對話框隱藏時更新?
以下是按要求提供的更多詳細信息:有兩個類,Dialog1和Dialog2,每個類都擴展了相同的基類BaseDialog,它擴展了QDialog類。
BaseDialog有一個插槽,只要GlobalCount發生變化就會被調用。 此插槽更新countWidget,用於繪制計數圖片。
void BaseDialog::updateCountWidget()
{
_countWidget->updateCount(globalCount);
_countWidget->update();
}
Dialog1有一個插槽(從QPushButton click()連接)創建並顯示Dialog2:
void Dialog1::showDialog2()
{
Dialog2* dialogTwo = new Dialog2();
dialog2->show();
}
Dialog2有兩個插槽(連接到QPushButton信號),一個從全局計數中減去,另一個用於關閉對話框。 當減去全局計數時,它會發出連接到Dialog1和Dialog2的updateCountWidget()槽的信號。
void Dialog2::subtractCount()
{
GlobalCount.subtractOne();
}
void Dialog2::userClosed()
{
accept();
}
當我單擊減去按鈕時,我可以看到Dialog2的_countWidget正確更新。 但是,當我關閉Dialog2,並且可以再次看到Dialog1時,Dialog1的_countWidget顯示一秒鍾的原始計數值,然后更新為新值。
我的目標是防止這種瞬間更新,因為它看起來對用戶來說非常時髦。 這已經變得非常漫長,但我很欣賞任何見解!
呼叫
hide()
你做的時候在小部件上
setAttribute(Qt::WA_DontShowOnScreen, true);
之后
setAttribute(Qt::WA_DontShowOnScreen, false);
show()
它會起作用
我在Linux上使用Qt嵌入式
您也可以嘗試在->activate()
hiddenDialog->layout()->update()
之前執行hiddenDialog->layout()->update()
,這對我來說類似的情況下工作,並且不需要弄亂WA_xxx屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.