2014-10-17 2 views
0

간단히 말하면, 내가 만든 커스텀 위젯을 확장하는 새로운 클래스가 필요하기 때문에 UI에 대한 완전한 액세스 권한이 있습니다.Qt 내 자신의 위젯 확장하기

저는 지금까지 클래스를 서브 클래스/확장하는 방법에 따라 지금까지 여러 가지 다른 방법을 시도했지만 어쨌든 저는 여러 가지 이유로 끔찍하게 실패합니다.

또한 내 위젯을 새 클래스의 멤버로 사용하면이 상황에 적합하지 않습니다.

누군가 내가이 작업을 수행하는 방법에 대한 간단한 예를 보여줄 수 있습니까? 나는 많은 검색을 해왔지만 정확히 내가하는 일에 관련된 히트를 찾을 수 없다. 그 밖의 모든 것이 실패하면 나는 단순히 코드를 복사하고 실제적으로 새로운 위젯을 만들 것이다. 나에게 많은 시간을 절약 해 주었지만, 그렇게하는 것이 옳다고 생각하지는 않는다.

나의 첫번째 본능 (내 새로운 클래스, Asd 위젯되고있는 Qwe)이 그런 짓을했다 :

class Qwe : Asd {public: ...} 

그리고 심지어 위젯의 UI의 공개를,하지만 난 그냥 오류가 발생했습니다 : UNDEFINE 형 UI의

사용 ::

ASD

나는 UI의 요소에 액세스하려고 할 때마다.

답변

2

이라는 맞춤 위젯과 ChildWidget이라는 하위 위젯이 있다고합시다. 다음과 같이 일반적으로 BaseWidget를 선언,하지만 ui 회원이 아닌 개인의 보호합니다

protected: 
    Ui::BaseWidget *ui; 

BaseWidget에서 파생 된 일반 위젯으로 ChildWidget를 선언합니다. BaseWidget.cpp에서와 마찬가지로 을 ChildWidget.cpp 파일에 포함해야합니다 (이 포함 및 헤더 자체는 Qt에서 생성됩니다).

헤더 :

#include "BaseWidget.h" 

class ChildWidget : public BaseWidget { 
    Q_OBJECT 
public: 
    explicit ChildWidget(QString text, QWidget *parent = 0);  
}; 

출처 :

#include "ChildWidget.h" 
#include "ui_BaseWidget.h" 

ChildWidget::ChildWidget(QString text, QWidget *parent) : 
    BaseWidget(parent) 
{ 
    ui->label->setText(text); 
} 
+0

감사합니다,이 해결 내 문제 – Yattabyte