首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想将设置为PyQt5对象属性

我想将设置为PyQt5对象属性
EN

Stack Overflow用户
提问于 2015-02-14 15:30:10
回答 2查看 1.6K关注 0票数 5

我正在编写一个小程序,它使用Qt5 QML作为GUI层和Python3-PyQt5来实现数据模型。

现在,我希望在QML中显示一个ComboBox,并将其模型设置为枚举列表。如何将枚举导出为python类的属性,以便在QML中引用它?

我最好用QML写这个:

代码语言:javascript
复制
ComboBox {
  model: mymodel.car_manufacturers
  onCurrentIndexChanged: mymodel.selected_manufacturer = currentIndex
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-24 09:52:25

这是我的解决方案,对我来说已经足够好了。在python代码中,我有以下内容:

代码语言:javascript
复制
class CarManufacturers(enum.Enum):
    BMW, Mercedes = range(2)

mfcChanged = pyqtSignal()

@pyqtProperty('QStringList', constant=True)
def carmanufacturers(self):
    return [mfc.name for mfc in CarManufacturers]

@pyqtProperty('QString', notify=mfcChanged)
def mfc(self):
    return str(CarManufacturers[self._mfc].value)

@modus.setter
def mfc(self, mfc):
    print('mfc changed to %s' % mfc)
    if self._mfc != CarManufacturers(int(mfc)).name:
        self._mfc = CarManufacturers(int(mfc)).name
        self.mfcChanged.emit()

在QML中我有:

代码语言:javascript
复制
ComboBox {
    model: myModel.carmanufacturers
    currentIndex: myModel.mfc
    onCurrentIndexChanged: myModel.mfc = currentIndex
}
票数 2
EN

Stack Overflow用户

发布于 2015-02-14 18:03:45

您应该将枚举放在派生自QObject的类中。此外,应该用Q_ENUMS宏标记它。然后,您可以从类的元对象中获取枚举的QMetaEnum,迭代键及其值,并将每个键添加到QStringList中。

在C++中,这类似于:

代码语言:javascript
复制
MyClass myObj;
const QMetaObject* metaObj = myObj.metaObject();
QMetaEnum enumType = metaObj->enumerator(metaObj->indexOfEnumerator("MyEnumType"));

QStringList list;
for(int i=0; i < enumType.keyCount(); ++i)
{
    QString item = QString::fromLatin1(enumType.key(i)) + "  "
                 + QString::number(enumType.value(i));
    list.append(item);
}

现在可以使用QQmlContext::setContextProperty将字符串列表公开给QML:

代码语言:javascript
复制
QQmlContext *context = engine.rootContext();
context->setContextProperty("myModel", QVariant::fromValue(list));

ComboBox项如下所示时,您将有一个包含枚举键和值的组合框:

代码语言:javascript
复制
ComboBox {
  model: myModel
  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28517132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档