【发布时间】:2021-04-12 12:01:34
【问题描述】:
假设我有一个 python 枚举:
class UserState(Enum):
OFFLINE = auto()
ONLINE = auto()
BUSY = auto()
我可以使用UserState.ONLINE、UserState.OFFLINE 或UserState.BUSY 访问不同的选项。
如果我想让它成为一个 QEnum 以便我可以在 QML 中使用它,我需要将它包装在一个 QObject 中,如下所示:
class UserState(QObject):
@QEnum
class Options(Enum):
OFFLINE = auto()
ONLINE = auto()
BUSY = auto()
在 QML 中,我现在可以访问这个枚举,就像在 python 中访问普通的 python 枚举一样。但是,如果我想从 python 访问这个枚举,我必须写 UserState.Options.ONLINE。
如何使用相同的语法创建一个可以在 python 和 QML 中工作的枚举?
我已经找到了一个解决方案,我将在答案部分发布。但是,它涉及看起来不正确的嵌套元类。我认为最佳解决方案是从 QObject 和 Enum 派生的类,以具有适用于每个上下文的所有功能。
如果有人可以提供一个这样的版本,我会做出接受的答案。 否则你可以告诉我,为什么我的解决方案实际上是一个好的解决方案。
【问题讨论】:
-
您是否尝试过在Qt bug tracker 上创建问题?他们或许能提供帮助。
标签: python python-3.x qt qml pyside2