Qt Designer 使用自定义插件崩溃

Posted

技术标签:

【中文标题】Qt Designer 使用自定义插件崩溃【英文标题】:Qt Designer crashes with custom plugin 【发布时间】:2016-03-12 17:34:57 【问题描述】:

创建了类似于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 Designer 和 Creator 相同的 Qt 和 VS C++ 版本 - 基于 Qt 5.5.1(MSVC 2013,32 位)。

附:所以方法如下:注释掉扩展和工厂类 - 仍然崩溃,我的小部件类中的顺序注释/未注释方法:问题出现在

Q_PROPERTY(QString pageTitle READ pageTitle WRITE setPageTitle STORED false)

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

现在 Qt Designer 在向表单添加小部件时会崩溃。将继续寻找原因。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Qt Designer 使用自定义插件崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Qt系列文章之三十六(自定义Qt Designer插件)

Qt Designer 和 PyQt5 自定义插件加载 TypeError

Qt Designer 的自定义动作插件

Qt Designer插件安装问题

qt designer的插件

qt designer的插件