2010-04-07 8 views
7

Ich habe eine Klasse wie dieses
Wie kann ich von QWidget und QThread erben?

class GUI : public QWidget, public QThread 

Wenn ich das tun oben i Fehler über Verbindungssignale erhalten. The error says Reference to "connect" is ambiguous. Gibt es eine Möglichkeit, von beiden zu erben?

Vielen Dank

+5

Bitte erläutern Sie, warum Sie dies tun möchten. Da es nicht möglich ist (siehe Antworten), würden wir gerne wissen, welche der Dinge * Ihnen * vorschlagen wird. Das erfordert mehr Informationen. –

+0

Mein Programm empfängt Nachrichten von einem anderen Computer über Firewire. Empfangene Nachrichten werden an eine Datei weitergeleitet, von wo die GUI sie liest. Ich möchte Firewire-Nachrichten in einem Thread und GUI in einem anderen Thread behandeln. – infinitloop

Antwort

11

Sie können nicht. Sowohl QWidget als auch QThread erben (nicht virtuell) von QObject. Sie haben daher keine virtuelle Ableitung, also zwei Kopien von QObject, die den Compiler verwirren. QObject wurde speziell auf diese Weise entwickelt. Siehe:

Es gibt einige, die angeblich um das ging (nicht auf den Link jetzt finden können, aber es ist da draußen auf Google, ich das gleiche Problem hatte zwei Wochen), aber es ist bestenfalls unsicher.

Bearbeiten: der beste Weg wäre wahrscheinlich, ein anderes Objekt von QThread erben und behalten Sie das Objekt als Mitglied in Ihrer GUI Klasse. Das ist die Art von Problemumgehung, die die meisten Leute in dieser Angelegenheit machen.

-1

Sie können nicht von mehreren QObjects erben.

Sie können von einem erben und den anderen zu einer Mitgliedsvariablen machen und von dort aus arbeiten.

class GUI : public QWidget 
{ 
    QThread myThread; 
}; 

Sie haben Ihre Klassen-GUI benannt - ist das die Haupt-GUI Ihres Programms? Sehen Sie sich die Beispiele im Ordner Qt examples an - sie haben Beispielprogramme sowohl für GUI's als auch für Threads.

+2

Nur der Hauptthread kann mit Widgets arbeiten, sodass ein Widget als Mitglied eines Threads seltsam erscheint. Was könnte das erreichen? –

+0

oops, wusste das nicht. – Will

+3

"Sie sollten von QMainWindow erben" ist falsch, Sie sollten das nur tun, wenn Sie tatsächlich einige der von QMainWindow bereitgestellten Funktionen möchten. Jedes QWidget ohne Eltern ist automatisch ein Fenster. – rohanpm

0

QWidgets und GUI-bezogene Objekte sind nicht in verschiedenen Threads als der Hauptthread der Anwendung. Sie sollten nicht beide erben. Sie können nicht auch die Funktion moveToThread() eines Widgets aufrufen.

Verwandte Themen