Qt:更新在显示之前隐藏的小部件?

时间:2012-01-06 18:14:08

标签: c++ qt user-interface

我有两个QDialog堆叠在一起,在每个对话框的布局中显示在QWidget中的一些数据之间共享(一个小部件以图形方式显示计数)。

在当前显示的QDialog中,用户可以更改该数据。此更改将传播到两个小部件,并在当前QDialog中显示正确的计数。但是,当用户关闭该QDialog并且下面的那个变为可见时,显示计数的QWidget会显示旧值,然后再更新为正确的值。

我知道下面的QWidget在显示另一个QDialog之前具有正确的值,但我似乎无法让之前更新。我试了这个,但仍然隐藏着:

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显示一秒钟的原始计数值,然后更新为新值。

我的目标是防止这种瞬间更新,因为它看起来对用户来说非常时髦。这已经变得非常漫长,但我很欣赏任何见解!

2 个答案:

答案 0 :(得分:7)

致电

hide() 
当你做

时,在小工具上

setAttribute(Qt::WA_DontShowOnScreen, true);

之后

setAttribute(Qt::WA_DontShowOnScreen, false);
show()

它会起作用

我在Linux上使用Qt嵌入

答案 1 :(得分:0)

您也可以尝试在hiddenDialog->layout()->update()之前执行->activate(),这对我来说也是类似的情况,并且不需要混淆WA_xxx属性。