Skip to content

QT 问题记录

如何找 QT 程序的错误原因

使用 export QT_DEBUG_PLUGINS=1, 然后再运行文件, 这样会显示比较详细的信息告诉你错在哪里。

QtGui/... flie not found

QtGui is not in the Qt5, we should use QtWidgets

qt 和 connect冲突

把 connect 变为 ::connect 即可

qt 更改名称容易导致的错误,ui 中 design 中也要改掉名字

qt: undefined reference to vtable..

https://stackoverflow.com/questions/2555816/qt-linker-error-undefined-reference-to-vtable

qt --qdebug 显示不了

touch ~/.config/QTProject/qtlogging.ini

QObject::setParent: Cannot set parent, new parent is in a different thread

这个错误曾经让我 DEBUG 了半天。这个绝对是因为某个 GUI 里面用了一个 QThread,然后对这个 QThread 进行了什么处理。

我当时信誓旦旦觉得我没这样做。但最后发现:我是在 GUI 里面设置了一个 QThread,我在 main.py 中有一个全局异常处理函数,每次异常后就进入这个函数了。但是如果是 QThread 里面报错,同样会到这个函数,此时进入到这个函数是在 QThread 这个线程了,此时新建一些 GUI 就会有问题。

所以处理方式就是需要 GUI 中连接 QThread 的错误信号,即让它回到主线程上来。

class MyWin(QWidget, window_2.Ui_Form):
    def __init__(self):
        # ...

        self.capture_thread = captureThread.CaptureThread()
        # ! 连接错误信号,不这样做全局捕获异常会有问题
        self.capture_thread.error_occurred.connect(self.handle_thread_error)

    # QThread 出错时,直接向上报错
    def handle_thread_error(self, error_msg):
        raise Exception(error_msg)

Comments