我在用作QtDesigner自定義小部件的小部件中的標誌聲明有問題。Qt設計器自定義小部件:使用標誌
這個小工具使用過濾器代理模型,稱爲QgsMapLayerComboBox
在過濾代理模型(QgsMapLayerProxyModel)一QComboBox,我已經定義的標誌:
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代碼中製作的。
完美,非常感謝! –