我正在构建类似CAD的应用程序,当视口对象选择发生更改时,会发出包含新对象的QHash的信号。此信号由其文档子窗口捕获,该窗口将新属性/设置UI从其中提取出来,销毁主窗口属性窗格中的现有属性显示,并用新属性/设置替换它们。
使用print语句,我知道这是有效的 - 所有信号/插槽连接都正确触发。但是,如果我直接在主窗口上执行操作(按下按钮,将鼠标悬停在窗口小部件上),那么属性窗口小部件的重新绘制非常不一致。但是,当我只是在视口中选择对象时,属性窗格'错过'更新,因此它最终显示前一个对象的属性 - 我知道这不是我的问题,因为如果我移动窗口或与小部件(触发重绘),小部件神奇地变得正确。
不会从单独的线程调用这些函数。如果我在我的代码中手动调用update(),则没有任何变化。如果我直接调用repaint()(我知道我不应该)它会更好一些,但它有点不稳定 - 有时候根本不绘制小部件。
有没有人有类似的经历?
答案 0 :(得分:2)
您是否尝试过使用静态函数QApplication::processEvents()?
您可能想要执行QApplication :: processEvents(QEventLoop :: ExcludeUserInputEvents),这会阻止应用程序在processEvents返回给调用者之前处理鼠标单击或按键。