Повышение до пользовательского виджета в пространстве имен - PullRequest
7 голосов
/ 01 сентября 2010

У меня есть MyCustomWidget в пространстве имен MyNameSpace

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

Как мне продвинуть QWidget в MyCustomWidget в форме пользовательского интерфейса? Кажется, он не принимает пользовательское пространство имен.

Ответы [ 2 ]

12 голосов
/ 02 сентября 2010

Введите имя класса с включенным пространством имен: My::PushButton.Оно работает.Обратите внимание:

  • Qt Designer попытается угадать имя заголовка: my_pushbutton.h.Измените его, если оно неправильное.
  • Вы должны проверить пути включения в своем проекте, чтобы определить, будет ли работать глобальное включение для продвигаемого виджета
1 голос
/ 18 июня 2015

Мой пользовательский плагин работает хорошо, используя следующий код. В этом примере пространство имен используется не только в плагине, но и в классе, который наследует плагин.

Заголовок для плагина --- его можно использовать в 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;
};

}

cpp файл для этого плагина

Реализуйте класс как обычно, но следующие методы должны учитывать пространство имен:

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) {}
}; 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...