qt程序中报错:`QObject: Cannot create children for a parent that is in a different thread`,该如何解决?
时间: 2023-02-13 20:44:59 浏览: 628
这个错误通常是在你尝试在一个 QObject 的子线程中创建另一个 QObject 的子对象时会发生的。为了解决这个问题,你需要确保在同一个线程中创建父对象和子对象。
你可以使用 QObject::moveToThread() 方法将一个 QObject 及其子对象移动到另一个线程,但是要注意,这个方法只能在对象没有父对象时使用。
另一种方法是在创建子对象之前,使用 QObject::setParent() 方法将子对象的父对象设置为在同一线程中的另一个对象。
例如:
```
QThread *thread = new QThread;
MyObject *myObject = new MyObject;
myObject->setParent(parentObjectInMainThread);
myObject->moveToThread(thread);
thread->start();
```
如果你无法控制对象的创建和父子关系,你可以尝试使用信号和槽来解决这个问题。例如,你可以在主线程中创建一个对象,并将其作为槽的参数传递给子线程的信号,然后在子线程的槽函数中对对象进行操作。
例如:
```
// main.cpp
void MainWindow::onButtonClicked()
{
QThread *thread = new QThread;
MyObject *myObject = new MyObject;
connect(thread, &QThread::started, myObject, &MyObject::doWork);
connect(myObject, &MyObject::workFinished, thread, &QThread::quit);
connect(thread, &QThread::finished, thread, &QThread::deleteLater);
myObject->moveToThread(thread);
thread->start();
}
// myobject.h
class MyObject : public QObject
阅读全文