擅长:python、mysql、java
<p><code>blockSignals(bool)</code>旨在抑制<code>QObjects</code>及其子类发出信号,从而防止任何其他对象在插槽中接收它们。但这是一个<code>QObject</code>方法。如果您特别试图阻止一个对象响应您所做的更改而发出信号,这可能会触发<strong>计算或插槽中的其他一些昂贵的处理,那么这就是您想要的。</p>
<p>但是,如果您的情况是,重复更改会导致多次昂贵的绘制操作(或在小部件上生成其他昂贵的事件),那么您可以使用<a href="http://qt-project.org/doc/qt-4.8/qwidget.html#updatesEnabled-prop" rel="noreferrer">^{<cd4>}</a>禁用更新。这个方法的一个好处是它递归地禁用目标小部件的子部件,防止它们也被更新。因此,在重新启用之前,层次结构中的任何内容都不会接收更新。</p>
<pre><code>mainWidget.setUpdatesEnabled(False)
# do a bunch of operations that would trigger expensive events
# like repaints
mainWidget.setUpdatesEnabled(True)
</code></pre>
<p>最终,这取决于问题的根源是来自触发信号,还是触发小部件事件。屏蔽这些信号仍将允许小部件处理其事件,但不通知任何其他侦听器。<code>updatesEnabled</code>是包装许多列表/表/树更新的常用方法。之后再次启用时,将执行单个更新后操作。</p>