Qt Designer与自定义插件崩溃

时间:2016-03-12 17:34:58

标签: plugins qt-designer qt5.5 msvc12

创建类似于Container Extension Example的自定义设计器插件。在使用QDesignerCustomWidgetInterfaceQDesignerContainerExtensionQExtensionFactory类进行一些修改并向我的容器添加以下方法之后:

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。所以方法如下:注释掉扩展和工厂类 - 仍然崩溃,我的widget类中的sequentaly注释/未注释方法:问题出现在

Q_PROPERTY(QString pageTitle READ pageTitle WRITE setPageTitle STORED false)

当没有可用页面时,

和方法pageTitle和setPageTitle为当前页面。当没有添加页面时,需要考虑在这里设置/输出什么。或者默认情况下至少添加1页。

现在Qt Designer在向窗体添加窗口小部件时崩溃了。将继续寻找原因。

1 个答案:

答案 0 :(得分:0)

为widget()方法添加了索引检查,现在可以正常工作。所以需要检查Qt Designer可以调用潜在崩溃的所有方法(例如,在这种情况下没有页面)。