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

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

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

我知道下面的QWidget在显示另一个QDialog之前有正确的值,但我似乎无法在对话框可见之前更新对话框。 我仍在隐藏时试过这个:

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属性。

链接地址: http://www.djcxy.com/p/39271.html

上一篇: Qt: Update widgets that are hidden before they are then shown?

下一篇: Cannot connect QMainWindow and QDialog