Qt Designer自定义小部件:使用标志

丹尼斯·鲁扎德(Denis Rouzaud)

我在用作QtDesigner的自定义窗口小部件的窗口小部件中声明标志时遇到问题。

此小部件是使用名为QgsMapLayerComboBox的过滤器代理模型的QComboBox

在过滤器代理模型(QgsMapLayerProxyModel)中,我定义了标志:

class GUI_EXPORT QgsMapLayerProxyModel : public QSortFilterProxyModel
{
    Q_OBJECT
    Q_FLAGS( Filters )
  public:
    enum Filter
    {
      NoFilter = 1,
      RasterLayer = 2,
      NoGeometry = 4,
      PointLayer = 8,
      LineLayer = 16,
      PolygonLayer = 32,
      HasGeometry = PointLayer | LineLayer | PolygonLayer,
      VectorLayer = NoGeometry | HasGeometry
    };
    Q_DECLARE_FLAGS( Filters, Filter )

    ...
};

Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayerProxyModel::Filters )

现在,我希望能够直接在Qt Designer中定义这些设置。因此,我在组合框类中重用了来自代理模型类的标志:

class GUI_EXPORT QgsMapLayerComboBox : public QComboBox
{
    Q_OBJECT

    Q_FLAGS( QgsMapLayerProxyModel::Filters )
    Q_PROPERTY( QgsMapLayerProxyModel::Filters filters READ filters WRITE setFilters )

  public:
    explicit QgsMapLayerComboBox( QWidget *parent = 0 );

    //! setFilters allows fitering according to layer type and/or geometry type.
    void setFilters( QgsMapLayerProxyModel::Filters filters );

    //! currently used filter on list layers
    QgsMapLayerProxyModel::Filters filters(){ return mProxyModel->filters(); }
}

这正在按预期方式工作。

但是,这些小部件也可以使用SIP在python库中编译。我已经为pyuic创建了一个模块(在/usr/lib/python2.7/dist-packages/PyQt4/uic/widget-plugins中),因此它知道在哪里寻找该小部件:

pluginType = MODULE
def moduleInformation():
    return "qgis.gui", ("QgsMapLayerCombobox", )

现在,问题在于pyuic抱怨:AttributeError: unknown enum QgsMapLayerProxyModel::RasterLayer因为找不到QgsMapLayerProxyModel。

我想到的唯一解决方案是复制QgsMapLayerComboBox中的标志:

class GUI_EXPORT QgsMapLayerComboBox : public QComboBox
{
    Q_OBJECT

    Q_FLAGS( Filters2 )
    Q_PROPERTY( Filters2 filters2 READ filters2 WRITE setFilters2 )

  public:
    typedef QgsMapLayerProxyModel::Filter Filter2;
    typedef QgsMapLayerProxyModel::Filters Filters2;

    explicit QgsMapLayerComboBox( QWidget *parent = 0 );

    //! setFilters allows fitering according to layer type and/or geometry type.
    void setFilters2( Filters2 filters );

    //! currently used filter on list layers
    Filters2 filters2(){ return static_cast<Filters2>( mProxyModel->filters() ); }
}

但这是行不通的:我没有在Qt Designer中看到设置:您知道为什么吗?

您是否会想到一种更好的方法来解决此问题?

PS:这是在QGIS代码中完成的。

马蒂亚斯·库恩(Matthias Kuhn)

只需修改您的代码,Qt Designer就会知道在哪里可以找到所需枚举的定义:

pluginType = MODULE
def moduleInformation():
     return "qgis.gui", ("QgsMapLayerCombobox", "QgsMapLayerProxyModel" )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Qt Designer中使用PySide自定义小部件

来自分类Dev

使用 Qt Designer(生成的 GUI)创建自定义小部件并将它们提升为默认小部件

来自分类Dev

在Qt Designer自定义小部件中将QList作为属性

来自分类Dev

我的自定义小部件未在Qt Creator / Qt Designer中显示,但是在执行程序时显示

来自分类Dev

在Python Qt中访问自定义小部件?

来自分类Dev

Qt 在 QTableView 中设置自定义小部件

来自分类Dev

使用UI设计文件并使用自定义构造函数QT创建自定义小部件

来自分类Dev

使用 Qt GUI 编写 c++ dll,在自定义小部件中显示失败

来自分类Dev

Qt自定义小部件不显示子小部件

来自分类Dev

从Qt Designer调用小部件

来自分类Dev

使用 Qt Creator 中设计的自定义小部件将页面动态添加到 QStackedWidget

来自分类Dev

如何使用自定义编译器和自定义标志构建Qt?

来自分类Dev

QT 5将从QGraphicsView继承的自定义窗口小部件添加到设计器

来自分类Dev

是否可以在QtCreator中为Qt小部件设置(添加)自定义属性?

来自分类Dev

如何在QT Creator中升级自定义小部件

来自分类Dev

是否可以在QtCreator中为Qt小部件设置(添加)自定义属性?

来自分类Dev

设计器中自定义窗口小部件的QT QIcon属性

来自分类Dev

如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

来自分类Dev

Qt:如何制作像 QTextField 一样对齐的自定义小部件

来自分类Dev

使用Qt Designer在布局中居中放置小部件

来自分类Dev

获取自定义 Qt QGraphicsView 以使用 Qt Designer 制作的表单显示

来自分类Dev

访问在Qt Designer中添加的小部件

来自分类Dev

访问在Qt Designer中添加的小部件

来自分类Dev

Qt Designer(creator)小部件框,如小部件

来自分类Dev

Qt:为什么我的自定义qgraphicsview小部件在Linux上编译期间会产生错误?

来自分类Dev

动态地将自定义qt小部件添加到框架中,而无需每次更改布局

来自分类Dev

Qt Designer中的自定义菜单操作

来自分类Dev

Qt Designer中的自定义菜单操作

来自分类Dev

父母Qt小部件

Related 相关文章

  1. 1

    在Qt Designer中使用PySide自定义小部件

  2. 2

    使用 Qt Designer(生成的 GUI)创建自定义小部件并将它们提升为默认小部件

  3. 3

    在Qt Designer自定义小部件中将QList作为属性

  4. 4

    我的自定义小部件未在Qt Creator / Qt Designer中显示,但是在执行程序时显示

  5. 5

    在Python Qt中访问自定义小部件?

  6. 6

    Qt 在 QTableView 中设置自定义小部件

  7. 7

    使用UI设计文件并使用自定义构造函数QT创建自定义小部件

  8. 8

    使用 Qt GUI 编写 c++ dll,在自定义小部件中显示失败

  9. 9

    Qt自定义小部件不显示子小部件

  10. 10

    从Qt Designer调用小部件

  11. 11

    使用 Qt Creator 中设计的自定义小部件将页面动态添加到 QStackedWidget

  12. 12

    如何使用自定义编译器和自定义标志构建Qt?

  13. 13

    QT 5将从QGraphicsView继承的自定义窗口小部件添加到设计器

  14. 14

    是否可以在QtCreator中为Qt小部件设置(添加)自定义属性?

  15. 15

    如何在QT Creator中升级自定义小部件

  16. 16

    是否可以在QtCreator中为Qt小部件设置(添加)自定义属性?

  17. 17

    设计器中自定义窗口小部件的QT QIcon属性

  18. 18

    如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

  19. 19

    Qt:如何制作像 QTextField 一样对齐的自定义小部件

  20. 20

    使用Qt Designer在布局中居中放置小部件

  21. 21

    获取自定义 Qt QGraphicsView 以使用 Qt Designer 制作的表单显示

  22. 22

    访问在Qt Designer中添加的小部件

  23. 23

    访问在Qt Designer中添加的小部件

  24. 24

    Qt Designer(creator)小部件框,如小部件

  25. 25

    Qt:为什么我的自定义qgraphicsview小部件在Linux上编译期间会产生错误?

  26. 26

    动态地将自定义qt小部件添加到框架中,而无需每次更改布局

  27. 27

    Qt Designer中的自定义菜单操作

  28. 28

    Qt Designer中的自定义菜单操作

  29. 29

    父母Qt小部件

热门标签

归档