我正在使用
Qt6.5.1
并且我已经在 QML 中创建了 ComboBox
。以下是我所做的。
我有以下 C++ 课程。
class MyComboBoxOptions : public QObject {
Q_OBJECT
Q_PROPERTY(QStringList options READ options)
public:
QStringList options() const {
return mComboOptionStrings;
}
private:
const QStringList mComboOptionStrings {
"Option 1",
"Option 2",
"Option 3",
};
};
在
main.cpp
中,我已执行以下操作以在 QML 中注册上述类 MyComboBoxOptions。
MyComboBoxOptions myComboBoxOptions;
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("myComboBoxOptions", &myComboBoxOptions);
然后我在 QML 中有像下面这样的
ComboBox
。
ComboBox {
id: comboBox
height: 20
width: 50
model: myComboBoxOptions.options
currentIndex: 0 // default
}
问题:
如何用
QStringList
替换 MyComboBoxOptions::options
返回的 Q_ENUM
?简单地返回 Q_ENUM
是行不通的。
一般来说 - 如果您想支持任何枚举,则需要 metaObject() 来查找 QMetaEnum 枚举器(),然后您需要遍历 key() 或 value() 来生成 QStringList 或 QVariantList (包含整数)供 QML 使用。
如果您想支持特定的枚举,那么您需要提供一个 getter,将您的枚举转换为 QVariant / QVariantList / QQmlListProperty。