Qt Designer 使用自定义插件崩溃
Qt Designer crashes with custom plugin
创建了类似于 Container Extension Example 的自定义设计器插件。在使用 QDesignerCustomWidgetInterface
、QDesignerContainerExtension
和 QExtensionFactory
classes 进行一些修改后,将以下方法添加到我的容器中:
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 位)。
P.S。所以方法如下:注释掉扩展和工厂 classes - 仍然崩溃,sequentaly commented/uncommented 我的小部件中的方法 class:问题出现在
Q_PROPERTY(QString pageTitle READ pageTitle WRITE setPageTitle STORED false)
当没有可用页面时,当前页面的 pageTitle 和 setPageTitle 方法。在没有添加页面的情况下需要考虑set/output 这里的内容。或者默认至少添加一页。
现在 Qt Designer 在将小部件添加到表单时崩溃。将继续查找原因。
向 widget() 方法添加了索引检查,目前工作正常。因此需要检查 Qt Designer 可以调用的所有方法是否存在潜在的崩溃(例如,在这种情况下没有页面)。
创建了类似于 Container Extension Example 的自定义设计器插件。在使用 QDesignerCustomWidgetInterface
、QDesignerContainerExtension
和 QExtensionFactory
classes 进行一些修改后,将以下方法添加到我的容器中:
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 位)。
P.S。所以方法如下:注释掉扩展和工厂 classes - 仍然崩溃,sequentaly commented/uncommented 我的小部件中的方法 class:问题出现在
Q_PROPERTY(QString pageTitle READ pageTitle WRITE setPageTitle STORED false)
当没有可用页面时,当前页面的 pageTitle 和 setPageTitle 方法。在没有添加页面的情况下需要考虑set/output 这里的内容。或者默认至少添加一页。
现在 Qt Designer 在将小部件添加到表单时崩溃。将继续查找原因。
向 widget() 方法添加了索引检查,目前工作正常。因此需要检查 Qt Designer 可以调用的所有方法是否存在潜在的崩溃(例如,在这种情况下没有页面)。