QObject::setParent: Cannot set parent, new Elternteil in einem anderen thread

Gruß

Ich habe folgende Klasse.

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;
};

In MyClass's constructor, ich classX zu this.classX und in init() ich connect einige classX Signale zu MyClass slots und Weise Umgekehrt und in someFunction() ich benutze classA und classB.

In meinem controller Klasse in Haupt-thread, erstelle ich MyClass Objekt, und führen Sie es in anderen thread.

MyClass * myClass = new MyClass(classX);
connect(&myClassThread, SIGNAL(started()), myClass, SLOT(init()));
myClass->moveToThread(&myClassThread);
myClassThread.start();

Sehe ich folgende Warnung in qDebugger.

QObject::setParent: Cannot set parent, new parent is in a different thread

Kann mir jemand sagen, warum bekomme ich die Warnung ?

Vielen Dank im fortgeschrittenen

PS 1: Die classX erstellt im Haupt-thread.

PS 2 : denken Sie Daran, Alles, was gut funktioniert und ich habe kein problem, ich möchte nur wissen, der Grund für diese Warnung und wie man es beheben.

PS 3 : ich benutze auch den folgenden Befehl in der main-thread machen, dass das Objekt in javascript.

webFrame->addToJavaScriptWindowObject("myClassObject", myClass);

Edit 1 : QThread myClassThread ist Klasse.

Edit 2 : ich glaube, der Mangel an Informationen, verwirrt Euch und ich bin sorry about that.

Den Konstruktor von MyClass ist wie folgt :

MyClass::MyClass(ClassX * classX)
{
     this.classX = classX;
}
  • Möglich, Duplikat der QObject: kann Nicht erstellen, die Kinder für einen Elternteil, der in einem anderen thread
  • einfach die x-te Frage zu diesem. MyClass * myClass = new MyClass(classX); sollte MyClass * myClass = new MyClass(0);. Full stop.
  • Auch ohne Parameter bekomme ich noch die Warnungen
  • Dies ist keine doppelte Frage, Wie man sehen kann, rief ich die Methoden von myClass über signal-slot! Auch wenn ich nicht aufrufen von Methoden oder gar nicht verwenden, das Objekt nach der Schöpfung, noch bekomme ich die Warnung
  • Ich nicht erwähnen, signal-und slot. Wenn das code-snippet oben nicht funktioniert, mit new Myclass(0), dann ist es anders als in Ihrem wirklichen code (wie oben nur für die problem-und Verlustrechnung).
  • mit MyClass(0) ich bekomme immer noch die Warnung, aber wie ich schon erwähnt habe, wird Der code ausgeführt, und ich habe kein problem, wollen einfach Nur, um die Warnung Grund
  • zeigen Konstruktor von MyClass. geben Sie ein QObject ist, als Erster parameter des Konstruktors ohne es seiend verwendet als Eltern? In diesem Fall verwechselst du uns.
  • Bitte prüfen Edit 2

InformationsquelleAutor M.H. | 2016-03-08
Schreibe einen Kommentar