gpt4 book ai didi

c++ - Q_ENUM 中索引的值

转载 作者:行者123 更新时间:2023-11-30 03:24:07 25 4
gpt4 key购买 nike

QMetaEnum 包含将枚举索引转换为实际值的方法:

int value(int index) const

但是如何转换回索引,例如,如果我想在某些需要按索引排序的控件中使用枚举?

int index(int value) const

?

最佳答案

使用以下函数:

int indexFromValue(const QMetaEnum & e, int value){
for(int ix=0; ix< e.keyCount(); ix++){
if(e.key(ix) == e.valueToKey(value))
return ix;
}
return -1;
}

例子:

#include <QCoreApplication>
#include <QMetaEnum>
#include <QObject>

class Foo : public QObject
{
Q_OBJECT
public:
using QObject::QObject;
enum class FooEnumType { TypeA=10, TypeB=21 };
Q_ENUM(FooEnumType)
};

static int indexFromValue(const QMetaEnum & e, int value){
for(int ix=0; ix< e.keyCount(); ix++){
if(e.key(ix) == e.valueToKey(value))
return ix;
}
return -1;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const QMetaObject &mo = Foo::staticMetaObject;
int index = mo.indexOfEnumerator("FooEnumType");
QMetaEnum metaEnum = mo.enumerator(index);
Q_ASSERT(indexFromValue(metaEnum, 10) == 0);
Q_ASSERT(indexFromValue(metaEnum, 21) == 1);
Q_ASSERT(indexFromValue(metaEnum, 100) == -1);
return 0;
}

#include "main.moc"

关于c++ - Q_ENUM 中索引的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971666/

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