Создан пользовательский плагин дизайнера, похожий на Container Extension Example. После некоторых модификаций с QDesignerCustomWidgetInterface
, QDesignerContainerExtension
и QExtensionFactory
классов и добавить следующие методы для моего контейнера:Нарушения Qt Designer с пользовательским плагином
Q_OBJECT
Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex)
Q_PROPERTY(QString pageTitle READ pageTitle WRITE setPageTitle STORED false)
public:
WidgetBox(QWidget *parent = 0);
int count() const { return mTreeWidget->topLevelItemCount(); }
QWidget* widget(int index) const;
QString pageTitle() const;
public slots:
void setCurrentIndex(int index);
void addPage(QWidget *widget);
void insertPage(int index, QWidget *widget);
void removePage(int index);
int currentIndex() const { return mTreeWidget->currentIndex().row(); }
void setPageTitle(QString const &newTitle);
protected:
QTreeWidgetItem * addCategory(QString pageName);
QTreeWidgetItem * insertCategory(int index, QString pageName);
PageButton *categoryButton(int index) const;
void createContainerWidget(QTreeWidgetItem* page, QWidget *widget);
void createCategoryButton(QTreeWidgetItem* page, QString pageName);
signals:
void currentIndexChanged(int index);
void pageTitleChanged(const QString &title);
Qt дизайнер начал врезаться на старте с моим плагином. Любой способ отлаживать плагин (расширение) и нашел причину? Плагин встроен в режим выпуска с такими же версиями Qt и VS C++, как Qt Designer и Creator - на основе Qt 5.5.1 (MSVC 2013, 32 бит).
P.S. Так метод следующим образом: закомментирована расширение и заводские классы - по-прежнему падает, sequentaly комментируемые/незакомментированной методы в моем классе виджета: проблема появляется в
Q_PROPERTY(QString pageTitle READ pageTitle WRITE setPageTitle STORED false)
и методы PAGETITLE и setPageTitle для текущей страницы, когда нет страниц, доступных. Нужно думать, что устанавливать/выводить сюда, когда ни одна страница не была добавлена. Или добавьте по крайней мере 1 страницу по умолчанию.
Теперь Qt Designer падает при добавлении виджета в форму. Продолжит поиск причины.