2010-09-01 4 views
7

Mam MyCustomWidget w MyNamespace namespacePromuj obyczajowa widget w obszarze nazw

namespace MyNameSpace{ 
    class MyCustomWidget : public QWidget{ 
    }; 
} 

W jaki sposób mogę promować QWidget do MyCustomWidget w moim formularzu UI? Wygląda na to, że nie akceptuje niestandardowej przestrzeni nazw.

Odpowiedz

11

Wpisz nazwę klasy z uwzględnieniem przestrzeni nazw: My::PushButton. To działa. Uwaga:

  • Qt Designer spróbuje odgadnąć nazwę nagłówka: my_pushbutton.h. Zmień go, jeśli jest źle.
  • należy sprawdzić zawierać ścieżki w projekcie w celu określenia, czy globalny należą do promowanej widget będzie działać
+0

Którą wersję Qt używasz? Myślę, że muszę używać starej wersji, ponieważ to, co powiedziałeś, nie działa. –

+0

Obecnie Qt 4.6 i Qt Creator 2.0, ale pamiętam, że działa to również ze starszymi wersjami. – andref

+0

To działało dla mnie w 4.7.1. Dzięki. – cweston

1

Moje niestandardowe plugin działa dobrze przy użyciu następującego kodu. W tym przykładzie przestrzeń nazw jest używana nie tylko w wtyczce, ale również w klasie, która dziedziczy wtyczkę.

Stół do wtyczki --- to może być stosowane w QDesigner

namespace plugin { 

class MyCustomPlugin: public QObject, public QDesignerCustomWidgetInterface 
{ 
    Q_OBJECT 
    Q_INTERFACES(QDesignerCustomWidgetInterface) 

    public: 
    MyCustomPlugin(QObject *parent = 0); 

    bool isContainer() const; 
    bool isInitialized() const; 
    QIcon icon() const; 
    QString domXml() const; 
    QString group() const; 
    QString includeFile() const; 
    QString name() const; 
    QString toolTip() const; 
    QString whatsThis() const; 
    QWidget *createWidget(QWidget *parent); 
    void initialize(QDesignerFormEditorInterface *core); 

    private: 
    bool initialized; 
}; 

} 

plik cpp dla tej wtyczki

Wdrożenie klasy jak zwykle, ale następujące metody należy wziąć pod stanowią przestrzeń nazw:

QString MyCustomPlugin::domXml() const 
{ 
    return "<widget class=\"plugin::MyCustomClass\" name=\"mycustomclass\">\n" 
    ... 
} 

QString MyCustomPlugin::name() const 
{ 
    return "plugin::MyCustomClass"; 
} 

QWidget *MyCustomPlugin::createWidget(QWidget *parent) 
{ 
    return new plugin::MyCustomClass(parent); 
} 

Q_EXPORT_PLUGIN2(mycustomplugin, plugin::MyCustomPlugin) 

MyCustomClass

namespace plugin { 

class QDESIGNER_WIDGET_EXPORT MyCustomClass: public MyCustomPlugin 
{ 
    Q_OBJECT 

    public: 
     MyCustomClass(QWidget * parent = 0) {} 
}; 

}