如何使 C++ 中的 Q_ENUM 用作 QML 中组合框的选项

问题描述 投票:0回答:1

我正在使用

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
是行不通的。

combobox qml qt6
1个回答
0
投票

一般来说 - 如果您想支持任何枚举,则需要 metaObject() 来查找 QMetaEnum 枚举器(),然后您需要遍历 key() 或 value() 来生成 QStringList 或 QVariantList (包含整数)供 QML 使用。

如果您想支持特定的枚举,那么您需要提供一个 getter,将您的枚举转换为 QVariant / QVariantList / QQmlListProperty。

© www.soinside.com 2019 - 2024. All rights reserved.