作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一组参数需要编辑,其中一些是枚举。
到今天为止,我在 QSpinBox 中使用枚举的原始值,这一点都不友好。你必须自己记住这些值并设置好的:
例如,E_Range 可以显示一个组合框,其中包含:
typedef enum {
ERANGE_2_5 = 0, /*!< +/- 2.5 V */
ERANGE_5 = 1, /*!< +/- 5 V */
ERANGE_10 = 2, /*!< +/- 10 V */
ERANGE_AUTO = 3 /*!< Auto range */
} TVoltageRange_e;
我没有找到任何有关在 QComboBox 中使用枚举的信息。可能吗?
如果是,步骤是什么?
我的意思是,我想我必须通过 Qt 声明枚举,以便它可以通过 Qt 元对象“枚举”。但从那里,我不确定。
最佳答案
当然,您始终可以对这些值进行硬编码,但是一旦您修改了该枚举,您就必须记住更改填充组合框的代码。
I mean, I guess I'll have to declare the enum through Qt so that it is "enumerable" with the Qt metaobject. But from there, I'm not sure.
确切地说,使用内省(introspection)是明智之举。用 Q_ENUMS
标记枚举并添加 Q_OBJECT
宏。然后:
Class::staticMetaObject()
获取类的元对象QMetaObject::indexOfEnumerator()
+ QMetaObject::enumerator()
为您的枚举获取 QMetaEnum
QMetaEnum::keyCount()
获取键的个数,迭代获取键名及其对应的值(QMetaEnum::key()
, QMetaEnum::keyToValue()
).有了这个,您将能够以编程方式填充您的组合框(典型的模式是添加枚举键作为用户可见的字符串,并将相应的值添加为其“项目数据”,参见。QComboBox
的文档。)
关于c++ - Qt:在 QComboBox 中使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16955918/
我是一名优秀的程序员,十分优秀!