我如何从QWidget和QThread继承?

时间:2010-04-07 20:54:56

标签: c++ qt qthread

我有这样的课程

class GUI : public QWidget, public QThread

当我执行上述操作时,我会收到有关连接信号的错误。 The error says Reference to "connect" is ambiguous。有没有办法继承两者?

谢谢

3 个答案:

答案 0 :(得分:11)

你做不到。 QWidgetQThread都从QObject继承(非虚拟)。因此,您没有虚拟派生,因此QObject的两个副本会混淆编译器。 QObject是专门为此设计的。参见:

有些人据称解决了这个问题(目前无法找到链接,但是它出现在Google上,两周前我遇到了同样的麻烦),但最多也是不安全的。

编辑:最好的方法可能是让另一个对象从QThread继承并将该对象保留为GUI类中的成员。这就是大多数人在这件事上所采取的一种解决方法。

答案 1 :(得分:0)

QWidgets与GUI相关的对象不在与应用程序主线程不同的线程中。你不应该继承它们。您也不能调用小部件的moveToThread()功能。

答案 2 :(得分:-1)

您不能从多个QObject继承。

您可以从一个继承并使另一个成为成员变量并从那里开始工作。

class GUI : public QWidget 
{
  QThread myThread;
};

您已将您的类GUI命名 - 这是您的程序的主要GUI吗?请参阅Qt示例文件夹中的示例 - 他们在GUI'sThreads上都有示例程序。