0

我正在构建一个类似于 CAD 的应用程序,当视口对象选择发生变化时,会发出一个包含新对象的 QHash 的信号。该信号被它的文档子窗口捕获,该窗口将新的属性/设置 UI 从中提取出来,破坏主窗口属性窗格中显示的现有属性,并用新的属性/设置替换它们。

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

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

有没有人有类似的经历?

4

1 回答 1

2

您是否尝试过使用静态函数QApplication::processEvents()

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

于 2011-08-12T08:28:13.323 回答