9

私はこのようなクラスを持っています

class GUI : public QWidget, public QThread

上記を実行すると、接続信号に関するエラーが発生します。The error says Reference to "connect" is ambiguous。両方から継承する方法はありますか?

ありがとうございました

4

3 に答える 3

13

できません。QWidgetQThreadから(非仮想的に)継承しますQObject。したがって、仮想派生がないためQObject、コンパイラを混乱させる2つのコピーがあります。QObjectこのように特別に設計されました。見る:

これを回避したとされる人もいますが(現在リンクは見つかりませんが、Googleにあります。2週間前に同じ問題が発生しました)、せいぜい安全ではありません。

編集:おそらく最善の方法は、別のオブジェクトをQThreadから継承し、そのオブジェクトをGUIクラスのメンバーとして保持することです。これは、ほとんどの人がこの問題で行う一種の回避策です。

于 2010-04-07T20:59:56.097 に答える
0

QWidgetsおよびGUI関連のオブジェクトは、アプリケーションのメインスレッドとは異なるスレッドに存在しません。両方を継承しないでください。moveToThread()ウィジェットの関数を呼び出すこともできません。

于 2014-01-22T14:57:09.637 に答える
-1

複数のQObjectから継承することはできません。

一方から継承し、もう一方をメンバー変数にして、そこから作業することができます。

class GUI : public QWidget 
{
  QThread myThread;
};

クラスGUIに名前を付けました-これはプログラムのメインGUIですか?Qtexamplesフォルダーの例を参照してください-GUIスレッドの両方にサンプルプログラムがあります。

于 2010-04-07T21:07:22.710 に答える