Qt – 使用线程界面卡死

原罪代码:connect(this, SIGNAL(StartWork(QVector)), Tfer, SLOT(DoWork(QVector)), Qt::DirectConnection)

解决办法

解决的方法当然是要删除Qt::DirectConnection这个参数,但是删除Qt::DirectConnection后程序会报错,添加下面代码注册就可以了。


1
2
#include <QMetaType>
qRegisterMetaType<QVector<QString>>("QVector<QString>");

分析过程

  1. 最开始由于在connect函数使用SIGNAL(StartWork(QVector))信号时,会报错误。
  2. 然后就在connect后添加一个Qt::DirectConnection后就不报错误了,但是执行线程后就出现问题了,槽函数中设置控件属性无效,程序卡死。
  3. 添加注册类型代码(添加头文件,并在程序初始化的时候注册类型)。
  4. 以前并不知道Qt::DirectConnection参数会导致这个问题,现在出现问题后才发现。

发表评论

电子邮件地址不会被公开。 必填项已用*标注