2010-04-07 3 views
7

나는 수업이
어떻게 QWidget과 QThread에서 상속받을 수 있습니까? 나는 내가 연결 신호에 대한 오류를 얻을 이상 수행 할 때

class GUI : public QWidget, public QThread 

같은 있습니다. The error says Reference to "connect" is ambiguous. 둘 모두로부터 상속받을 수있는 방법이 있습니까?

고맙습니다.

+5

이유를 설명하십시오. 할 수 없으므로 (답변을 참조하십시오) 우리는 * 제안 할 작업 *을 알고 싶습니다. 그건 더 많은 정보가 필요해. –

+0

내 프로그램이 firewire를 통해 다른 컴퓨터에서 메시지를받습니다. 수신 된 메시지는 GUI가 읽은 파일로 보내집니다. 하나의 스레드에서 파이어 와이어 메시지를 처리하고 다른 스레드에서 GUI를 처리하려고합니다. – infinitloop

답변

11

수 없습니다. QWidgetQThreadQObject에서 (사실상이 아님) 상속됩니다. 따라서 가상 파생물이 없기 때문에 컴파일러를 혼란스럽게하는 QObject의 사본이 두 개 있습니다. QObject은 특별히 이렇게 설계되었습니다. 참고 :이 주장이 주위에 가서 어떤 사람이 (지금의 링크를 찾을 수 있습니다,하지만 Google에서 거기있어, 내가 같은 문제가 있었다

-1

여러 QObject에서 상속 할 수 없습니다.

하나를 상속 받아 다른 멤버 변수를 만들어 거기에서 작업 할 수 있습니다.

class GUI : public QWidget 
{ 
    QThread myThread; 
}; 

클래스 이름이 GUI의 이름입니까? Qt examples 폴더의 예제를 참조하십시오. 이들은 모두 GUI'sThreads에 샘플 프로그램이 있습니다.

+2

위젯에서만 주 스레드가 작동하므로 위젯을 스레드의 구성원으로 만드는 것이 이상하게 보입니다. 이것이 성취 할 수있는 것은 무엇입니까? –

+0

죄송합니다. – Will

+3

"QMainWindow에서 상속해야합니다"는 false입니다. 실제로 QMainWindow에서 제공하는 일부 기능을 원할 경우에만해야합니다. 부모가없는 QWidget은 자동으로 창입니다. – rohanpm

0

QWidgets 및 GUI 관련 객체가 응용 프로그램 주 스레드와 다른 스레드에 속하지 않습니다. 둘 다 상속해서는 안됩니다. 위젯의 moveToThread() 기능으로도 호출 할 수 없습니다.

관련 문제