gpt4 book ai didi

qt - 在 QML 中使用枚举分配或更改 int 属性

转载 作者:行者123 更新时间:2023-12-02 06:11:45 28 4
gpt4 key购买 nike

考虑这个简单的枚举类:

#include <QObject>
class BookTypes : public QObject
{
Q_GADGET
Q_ENUMS(AllBooksType)

public:

enum AllBooksType{
eMagazine,
eReference,
eTextBook,
eThesis
};

signals:

public slots:

};

main()中输入注册

qmlRegisterUncreatableType<BookTypes>("trial", 1, 0, "BookTypes", 
"Don't create qml instance for BookTypes");

这是示例 QML:

Rectangle {
id: rect
x: 100; y: 100
width: 100
height: 70
color: "PowderBlue"
border.color: "RoyalBlue"
border.width: 1
radius: 3

MouseArea{
x: 0; y: 0
height: parent.height
width: parent.width
property int bt: BookTypes.eTextBook //perfect. now bt is 2
onClicked: {
console.debug("old book type:- ")
console.debug(bt) //prints 2
console.debug("selected book type:- ")
bt = BookTypes.eReference //gives error - why ?
console.debug(BookTypes.eReference) //prints 'undefined'
console.debug(bt)
}
}
}

这意味着枚举已正确公开,因为它在

中成功初始化了 bt
property int bt: BookTypes.eTextBook

我不明白的是:为什么当我尝试替换处理程序中的 bt 值时它无法访问:

bt = BookTypes.eReference //gives error - why ?

如何将这样的enum作为Q_INVOKABLE方法的参数传递,例如:

console.debug(BookTypes.eReference) //prints 'undefined'
SomeObj.someCPPMethod(BookTypes.eReference) // sends 'undefined' and defaults to 0

最佳答案

取自 docs :

Note: The names of enum values must begin with a capital letter in order to be accessible from QML.

这就引出了一个问题:为什么它在属性绑定(bind)中起作用?我不知道,可能是 Qt 错误。

关于qt - 在 QML 中使用枚举分配或更改 int 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693717/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com