【发布时间】:2016-03-08 13:28:29
【问题描述】:
问候
我有以下课程。
class MyClass : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE QVariant status();
public:
MyClass(ClassX * classX);
public slots:
void slotA();
void slotB();
signals:
void signalA();
void signalB();
private:
void init();
void doSomething();
private:
ClassX * classX;
ClassA classA;
ClassB classB;
};
在MyClass 的构造函数中,我将classX 设置为this.classX,在init() 中,我将connect 的一些classX 信号发送给MyClass 插槽,反之亦然,在someFunction()我使用classA 和classB。
在主线程的controller 类中,我创建MyClass 对象并在不同的线程中运行它。
MyClass * myClass = new MyClass(classX);
connect(&myClassThread, SIGNAL(started()), myClass, SLOT(init()));
myClass->moveToThread(&myClassThread);
myClassThread.start();
我在qDebugger 中看到以下警告。
QObject::setParent: Cannot set parent, new parent is in a different thread
谁能告诉我为什么会收到这个警告?
在此致谢
PS 1:classX 在主线程中创建。
PS 2 : 请记住,一切正常,我没有任何问题,我只想知道这个警告的原因以及如何解决它。
PS 3:我还在主线程中使用以下命令来公开javascript中的对象。
webFrame->addToJavaScriptWindowObject("myClassObject", myClass);
编辑 1:QThread myClassThread 是类成员。
编辑2:我相信缺乏信息,让你们感到困惑,对此我深表歉意。
MyClass的构造函数是这样的:
MyClass::MyClass(ClassX * classX)
{
this.classX = classX;
}
【问题讨论】:
-
这很容易成为第 n 个问题。
MyClass * myClass = new MyClass(classX);应该是MyClass * myClass = new MyClass(0);。句号。 -
@UmNyobe 即使没有参数,我仍然会收到警告
-
@UmNyobe 这不是重复的问题,如您所见,我通过信号槽调用了 myClass 的方法!即使我不调用任何方法,甚至在创建后不使用对象,我仍然会收到警告
-
我没有提到信号和插槽。如果上面的代码 sn-p 不能与 new Myclass(0) 一起使用,那么它与您的真实代码不同(因为上面的代码仅用于问题陈述)。
标签: c++ multithreading qt qthread qtwebkit