MyThread类继承Qthread,MyThread包含一个OBJECT类,MyThread在主线程初始化并启动出现下列错误 QObject: Cannot create children for a parent that is in a different thread. (Parent is IEC104Master(0x3258a00), parent's thread is QThread(0x243c4009f0)), current thread is MyThread(0x3258 xiancheng id 0x7fd2117fa700,请思考一下解决
时间: 2023-08-15 16:08:50 浏览: 69
这个错误提示是因为您在MyThread线程中创建了一个QObject对象,并将其父对象设置为另一个线程中的对象(即IEC104Master对象)。这是不允许的,因为QObject对象和其父对象必须在同一个线程中。
解决这个问题的方法是,在MyThread线程中创建您的QObject对象,并将其设置为MyThread线程的直接子对象,而不是设置IEC104Master对象为其父对象。这样做可以确保QObject对象和MyThread线程在同一个线程中。例如,
```
class MyThread : public QThread
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = nullptr) : QThread(parent)
{
// 在构造函数中创建QObject对象并将其设置为MyThread线程的直接子对象
m_object = new QObject();
m_object->moveToThread(this);
}
~MyThread() override
{
// 在析构函数中删除QObject对象
delete m_object;
}
private:
QObject *m_object;
};
```
在上述示例中,我们在MyThread的构造函数中创建了一个QObject对象,并使用moveToThread()方法将其设置为MyThread线程的直接子对象。这样做可以确保QObject对象和MyThread线程在同一个线程中,避免了跨线程访问的问题。
阅读全文