如何抑制警告QPixmap:在GUI线程外使用pixmaps是不安全的

sud*_*ang 3 python error-handling qt pyqt suppress-warnings

我有这个错误洪水我的终端,使其无法调试.有没有办法让这个警告沉默?仅当我在TableWidget上包含scrollToBottom()时才会生成此错误.

Rei*_*ica 9

不希望禁止该警告,因为它不是警告.这是一个错误.Qt在这里太客气了.它应该是一个硬判断,因为它的存在表明你编写代码的方式可能会破坏GUI对象的数据并继续超过这一点是一个愚蠢的差事.

不要永远调用GUI方法直接从其他线程,除非这些方法明确地记录线程安全的.

如果需要进行跨线程调用,请使用间接的,线程安全的方法:QMetaObject::invokeMethod对于QObjects 上的slot和invokable方法,或使用代理QObject.如果您正在从另一个线程进行映像更新,那么QImage使用signal-slot或metacall机制在线程之间传递实例是完全正确的.

有一个非常简单的标准来测试:如果一个的方法,QObject派生类是没有记录为线程安全的,你应该能够安全地断言,对象是居住在当前线程:

Q_ASSERT(widget->thread() == QThread::currentThread());
widget->scrollToBottom();
Run Code Online (Sandbox Code Playgroud)

这种方法似乎"无害" 并不重要.会TableWidget.scrollToBottom()造成那么多麻烦吗?是.或者它不能.即使它没有在特定的情况下,你仍然依赖于Qt的实现细节保持不变.您是否真的希望审核Qt代码以确定它是否安全?不.您的代码有错误.修理它.就这样.