【发布时间】:2012-02-04 10:55:39
【问题描述】:
我有两个 QDialogs 堆叠在一起,它们之间共享一些数据,显示在每个对话框布局中的 QWidget 中(一个以图形方式显示计数的小部件)。
在当前显示的 QDialog 中,用户可以更改该数据。此更改会传播到两个小部件,并且当前 QDialog 中会显示正确的计数。但是,当用户关闭该 QDialog 并且下方的 QDialog 变得可见时,显示计数的 QWidget 会在一瞬间显示旧值,然后再更新为正确的值。
我知道下面的 QWidget 在显示另一个 QDialog 之前具有正确的值,但我似乎无法让 Dialog 在它可见之前更新 。我在它仍然隐藏时尝试了这个:
hiddenDialog->layout()->activate()
hiddenDialog->layout()->update()
但在显示对话框之前它仍然无法实际更新。我的问题似乎与Qt: How to force a hidden widget to calculate its layout? 有关,除了我想在设置 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 会在一瞬间显示原始计数值,然后更新为新值。
我的目标是阻止这种瞬时更新,因为它对用户来说看起来很时髦。这已经变得很长了,但我很感激任何见解!
【问题讨论】:
-
Qt 嵌入式在 Linux 上运行。我将努力获得一个更完整且更有意义的示例。
-
我担心它可能依赖于底层平台内部,也可能在不同的操作系统上发生变化。
-
@MathiasKunter:这不是重复的。
标签: c++ qt user-interface