2011-11-03 2 views
3

커스텀 위젯 세트를 Qt Designer 플러그인으로 작성하려고합니다. 일부 속성은 모든 위젯에서 동일하므로 기본 클래스를 만들고 싶습니다. 그러나 기본 클래스가 (QP 디자이너에서 속성을 편집 할 수 있도록하기 위해 Q_PROPERTY 매크로 때문에) 기본 클래스가 QObject에서 상속되고 사용자 정의 위젯이 QWidget의 자식이어야 할 때 다중 상속에 문제가 있습니다. 하지만 Qt의 동적 속성을 발견하여 기본 클래스가 위젯 포인터를 가져 와서 동적 속성을 설정합니다.Qt Designer 사용자 정의 플러그인 및 동적 속성

class BaseClass { 
    QWidget *widget; 
    BaseClass(QWidget *widget) { 
    this->widget = widget; 
    this->widget->setProperty("Some", 0.0); 
    } 
    void setSome(double some) { 
    this->widget->setProperty("Some", some); 
    } 
... 

그게 전부입니다. 동적 속성을 설정하고 Qt Designer에서 편집하고 편집 할 수 있습니다. 모두 괜찮습니다. 그러나 나는 재산에서 무엇인가 잘못 읽고 싶다. 내가 사용하고있을 때 :

this->widget->property("Some").value<double>(); 

Qt 디자이너가 시작되지 않습니다 (?!).

내가

QVariant var = this->widget->property("Some"); 
return var.toDouble(); 

하면 다음이 이상을 사용할 때 같은 문제입니다! Qt Designer가 메시지 나 다른 힌트없이 시작되지 않습니다. 저는 디자이너와 함께 Qt 4.7.4를 사용하고 있습니다. Qt Creators 디자이너 (2.0.0, 2.0.1에서 테스트 됨)에서도 동일한 문제가 발생합니다.

내가 잘못 했나요? Qt의 문제입니까?

의견을 보내 주셔서 감사합니다. 당신은 당신이 대신 아이의 부모에 해당 속성을 설정합니다

Derived::Derived(QWidget* parent):Base(parent){ 

} 

같은 것을 사용 그래서 만약 다른는 QWidget을 만들 때는 QWidget 생성자에 전달

+0

값을 bool로 설정하고 double로 읽는다면 아마도 작동하지 않을 것입니다. – larsmoa

+0

죄송합니다. 실수입니다 ... 감사합니다. 나는 올바른 유형의 글을 읽고 쓰고 있는데, 이것은 잘못 쓰고있다. 내가 수정하려고한다. – tomicious

+0

지금 고쳐졌다 ... 다시 감사한다 – tomicious

답변

2

은 실제로 부모입니다.

QObject를 참조 할 때 Qit는 단순 상속자를 사용하기 때문에 Q_PROPERTY를 설정하고 필요한 속성을 정의하는 매크로를 추가하는 기본 클래스를 만듭니다.

는 도움이되기를 바랍니다.

+0

또는 부모 대신에 (QWidget *) 이것을 전달할 수있다. 기본 클래스 생성자 –

+0

답장을 보내 주셔서 감사합니다. 그래, 그래. 예를 들어, 일부 사용자 지정 단추가있는 경우 생성자는 다음과 같습니다. Button (QWidget * parent) : QAbstractButton (parent), BaseClass (this) {...} – tomicious