2012-02-10 2 views
1

방금 ​​QWidgets에 대해 읽고 있었으며 런타임 중에로드되는 위젯 인 플러그인을 만들고 싶습니다. 샘플 코드와 요구 사항을 살펴볼 때 플러그인은 인터페이스와 QObject를 상속 한 것으로 보입니다. 버튼과 슬롯이 다른 QWidget 플러그인을 어떻게 만들 수 있습니까? 또한 인터페이스에서 상속 한 플러그인과 QObject에서 상속받은 (QObject에서 상속 한) 기본 클래스를 만들 수 있습니다. 당신은 단지 그들의 이름을 (RTTI 지원을 필요로하지 않습니다) 알고에 의해, 런타임 중에 위젯을로드 할 수있는QWidget에서 상속 한 Qt 플러그인을 만드는 방법

http://developer.qt.nokia.com/doc/qt-4.8/plugins-howto.html

그러나, 나는 metaobject를 읽어보십시오. 그러나 나는 그것을 어떻게 알아들을 수 있었을까요? Whatever 플러그인을 다루려면 .pro 파일에 다른 플래그 세트를 사용하여 컴파일하는 특별한 프로젝트에 넣어야합니다. 하지만 내가 여기서 어떻게 할거야?

나는 정말로 qtplugin을 사용하고 싶지만 어떻게해야합니까?

아이디어 :

가이 플러그인이 반환하는는 QWidget을 만들 수 있도록 허용하고 최적의겠습니까? 필자가 인터페이스없이 인터페이스를 만들면 디자이너에게 플러그인을 작성하는 시점을 실제로 보지 마십시오. 아니면 내가 잘못 이해 했습니까?

class workspaceInterface { 
    virtual QWidget* createWorkspace(QWidget* parent); 
    ... other useful functions... 
} 

class mySpecialWidget : public QWidget { 
    mySpecialWidget { 
     add a layout, add some buttons, maybe change the color 
    } 
} 

//plugin 
#include "myspecialwidget.h" 

class myPlugin : public QObject, public workspaceInterface { 
    QWidget* createWorkspace(QWidget* parent) { 
     return new MySpecialWidget(); 
    } 
    .... 
} 

이 코드의 모든

http://techbase.kde.org/Development/Tutorials/Writing_Qt_Designer_Plugins

나는, 하나 개의 프로젝트에 넣어 플러그인으로 컴파일 한 후 내 주요 응용 프로그램에 대한보고에로드합니다.의 I 그것의 인스턴스를 만들 것 내가 표시 할 위젯을 만들도록하십시오.

이렇게하는 더 좋은 방법이 있습니까? 아니면이게 있습니까?

답변

0

Creating Custom Widgets for Qt Designer을 찾고있을 수 있습니다. 위젯 플러그인은 QWidget에서 상속받습니다. 예를 들어 World Time Clock Plugin을 참조하십시오.

위젯 플러그인은 대부분 Qt Designer 용이지만 일부 기능은 런타임 중에 QUiLoader을 사용하여 사용할 수 있습니다.

편집 :

그것은 Qt는 디자이너 플러그인을 작성하는 일부 투자는 확실히이다. 디자인 타임 지원이 필요하지 않은 경우 디자인 타임 지원을 거의 찾을 수 없습니다.

자신 만의 플러그인 인프라의 경우 표준 API (내보내기 기능)를 사용하여 일련의 동적 라이브러리에 플러그인을 패키지화하여 호출 할 수 있습니다.

+0

그게, 디자이너를위한 플러그인을 만들려고하지 않는 것. 사람들이 내 특별한 위젯을 사용하면 신경을 쓰지 않아도됩니다. 내가 원하는 것은 플러그인 메커니즘을 사용하여 런타임 중에 위젯에서로드 할 수 있어야한다는 것입니다. – chikuba

+0

.ui 파일 또는 위젯 이름만으로 위젯을 만들어야합니까? –

+0

내가 ui 파일을 가지고 있다고 생각하지 않습니다. 모든 위젯은 코드를 통해 eveything이 생성되는 h/cpp 파일입니다. 위젯을 만드는 함수로 플러그인 객체를 만들고 내 전문 위젯을 동일한 프로젝트에 넣는 것에 대해 생각해보십시오. 그게 못생긴가? – chikuba

관련 문제