У меня есть два QDialogs, накладываемые друг на друга, с некоторыми общими данными между ними, показанными в QWidget в макете каждого диалога (виджет, показывающий количество графически).
В показанном в настоящее время QDialog пользователь может изменить эти данные.Это изменение распространяется на оба виджета, и в текущем QDialog отображается правильное количество.Однако, когда пользователь закрывает этот QDialog, а тот, что внизу, становится видимым, QWidget, показывающий счетчик, показывает старое значение за долю секунды до того, как оно обновляется до правильного значения.
Я знаю, что QWidget снизуимеет правильное значение до того, как будет показан другой QDialog, но я не могу заставить Диалог обновить до того, как станет видимым.Я пытался сделать это, пока он еще был скрыт:
hiddenDialog->layout()->activate()
hiddenDialog->layout()->update()
Но он все равно не может обновиться, пока не появится диалоговое окно.Моя проблема вроде как связана с Qt: Как заставить скрытый виджет рассчитать его макет? , за исключением того, что я хочу затем показать QDialog после установки Qt :: WA_DontShowOnScreen.После включения 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), один вычитает из общего счета, другой закрывает диалог.Когда вычитается глобальный счет, он посылает сигнал, подключенный к слоту updateCountWidget () как Dialog1, так и Dialog2.
void Dialog2::subtractCount()
{
GlobalCount.subtractOne();
}
void Dialog2::userClosed()
{
accept();
}
Когда я нажимаю кнопку вычитания, я вижу правильно _countWidget обновления Dialog2,Однако, когда я закрываю Dialog2 и снова вижу Dialog1, _countWidget в Dialog1 показывает исходное значение счетчика за доли секунды, а затем обновляет новое значение.
Моя цель - предотвратить это мгновенное обновление, как это выглядит действительно прикольно для пользователя.Это стало неприлично длинным, но я ценю любые идеи!