我对Qt多线程有问题。我有一个想要作为主题的课程
//protdata.cpp
class ProtData : public QObject
{
Q_OBJECT
private:
QList<ProtDataInputHandler *> _inputs;
public:
ProtData();
void addInput();
....
};
void ProtData::addInput(QIODevice *input, bool network_order)
{
_inputs.append(new ProtDataInputHandler());
}
我还有另一个类display.cpp,其中我使用moveToThread()将protdata对象实例化为线程;
//display.cpp
...
QThread* newThread = new QThread();
_protdata->moveToThread(newThread);
newThread->start();
...
有时,在display.cpp中:
//display.cpp
....
_protdata->addInput();
当我执行addInput方法时,出现以下错误:
QObject:无法为处于不同线程中的父级创建子级。
(父母是ProtData(0x19bba50),父母的线程是QThread(0x19b3c18),当前线程是QThread(0x1f08930)
怎么了?我还必须将ProtDataInputHandler类移动到newThread吗?怎么样?
谢谢
最佳答案
必须仅在procdata.cpp中调用AddInput。
如果将其定义为插槽,则可以使用信号来调用函数:
// display.h
signals :
void addInputSignal();
// display.cpp
QObject::connect(this, SIGNAL(addInputSignal()), newThread, SLOT(addInput()));
// ...
emit addInputSignal();
// protdata.h
public slots:
void addInput();