2011-08-12 33 views
0

当视口对象选择更改发出的包含新对象的QHash的信号时,我构建了一个类似于CAD的应用程序。这个信号被它的文档子窗口捕获,它将新的属性/设置UI从它们中提出,销毁主窗口属性窗格中的现有属性显示,并用新的属性/设置替换它们。QWidget不一致地更新/重新绘制

使用打印语句,我知道这是有效的 - 所有信号/插槽连接都正确触发。但是,如果我直接在主窗口上执行操作(按下按钮,将鼠标悬停在小部件上),则更新该小部件时,属性小部件会非常不一致地重新绘制。但是当我只是在视口中选择对象时,属性窗格会“遗漏”更新,因此它最终会显示前一个对象的属性 - 我知道这不是我的问题,因为如果我移动窗口或与小部件(触发重绘),小部件奇迹般地变得正确。

这些函数不是从单独的线程中调用的。如果我在我的代码中手动调用update(),则没有任何更改。如果我直接调用repaint()(我知道我不应该),它会更好一些,但它有点不稳定 - 有时这些小部件根本不会被绘制。

有没有人有类似的经历?

回答

2

您是否尝试过使用静态功能QApplication::processEvents()

您可能想要执行QApplication :: processEvents(QEventLoop :: ExcludeUserInputEvents),这可以防止应用程序在processEvents返回给调用者之前处理鼠标单击或按键。

+0

就是这样!谢谢。 – cmannett85