翻译枚举值qt的字符串表示
Translate String Representation of Enum Values Qt
是否可以使用QT的翻译系统翻译enum
(即通过QMetaEnum
)的字符串表示?
我认为我需要某种方法,以获取lupdate
来拾取枚举字符串以进行翻译,要么在且仅当lupdate处理文件或通过修改文件的行为时,要么通过发出一些qt_tr_noop()代码来进行翻译。 lupdate
/ moc
本身。
例如,我的应用程序通过对话框向用户提供了"设置"选项。所有设置均定义为Q_PROPERTY
s。使用enum
的选项作为组合框出现,并且组合框的文本选项使用QMetaEnum::key()
作为显示的文本。以下是一些伪代码,可以跨越点。
小部件将具有一些enum
属性,例如:
class SomeWidget : public QWidget
{
Q_OBJECT
Q_ENUMS( Configuration );
enum Configuration
{
Config_Blue = 0,
Config_Green,
Config_Invisible,
Config_Backwards
};
Q_PROPERTY( Configuration READ Configuration WRITE SetConfiguration );
};
组合小部件的创建是由单独的设置管理器完成的,并进行类似的操作:
QWidget* SettingsItem::CreateWidget()
{
const QMetaObject* pMetaObj = this->m_pWidget->metaObject();
const QMetaProperty& rcProp = pMetaObj->property( this->m_iProp );
QMetaEnum cEnum = rcProp.enumerator();
if( cEnum.isValid() )
{
QComboBox* pRetWidget = new QComboBox;
for( int i = 0; i < cEnum.keyCount(); ++i )
{
int iVal = cEnum.value( i );
QString strKey = cEnum.key( i ); // Translate here?
pRetWidget->addItem( strKey, iVal );
}
}
...
return pRetWidget;
}
"设置"对话框中的组合框显示" config_blue"," config_green"等。我希望它只是说"蓝色","绿色"等。
在其余代码中,我们使用QT的翻译系统和linguist
实用程序,该实用程序非常好。我希望我也可以为enum
启用这种类型的翻译,而无需将字符串文字和tr()
的s添加到代码中。基本上,翻译器所需的所有信息已经在代码中存在,我只需要linguist
即可能够将这些枚举值识别为可转换的值。然后,我可以在组合框时调用tr()
。
我认为我需要某种方法,以获取lupdate
来拾取枚举字符串以进行翻译,要么通过发射一些qt_tr_noop()代码,并且仅当lupdate处理文件或通过修改文件的行为时lupdate
/moc
本身。
我认为也许宏可能会起作用,但是可能是不可能的。也许需要修改一些QT代码?
一开始,枚举标识符不应是用户可见的。这些是对开发人员而不是用户的标识符。将它们直接暴露于用户,在代码的内部设计和用户可见的行为之间添加了强大的耦合。最好避免。
您需要在枚举值和用户可见字符串之间映射。地图中的值应经过翻译,并且在翻译后应重新填充地图。例如:
class Object : public QObject
{
Q_OBJECT
Q_ENUMS(Configuration);
Q_PROPERTY(Configuration READ Configuration WRITE SetConfiguration);
enum Configuration {
Config_Blue, Config_Green, Config_Invisible, Config_Backwards
};
public:
static QString toString(Configuration c) {
switch (c) {
case Config_Blue: return tr("Blue", "Configuration");
case Config_Green: return tr("Green", "Configuration");
case Config_Invisible: return tr("Invisible", "Configuration");
case Config_Backwards: return tr("Backwards", "Configuration");
}
}
};
您现在可以翻译配置值。
我正在使用定义枚举的类中的专用功能。有帮助吗?(QT5.13)。
我称其为myClass :: totrstring(myenumval);
class MyClass : public QObject
{
Q_OBJECT
public:
explicit MyClass(QObject *parent = nullptr);
enum MyEnum {
myKey1,
myKey2,
...
};
Q_ENUM(MyEnum)
static QString toTrString(MyEnum t) {
return tr(qPrintable(QVariant::fromValue(t).toString()));
}
}
- 基于类型作为参数的字符串表示形式具有不同返回类型的函数
- C++ 将十六进制字符串表示形式转换为十六进制字符串表示形式
- C++字符串表示中将无符号字符数组转换为长(或长长)
- C++:用于调试的类的字符串表示形式
- 字符串表示日期并转换
- 如何解析小数分离器为结肠的数字的字符串表示:
- 如何获得Qopenglcontext(例如Qopenglcontext)的普通QT5类型的字符串表示
- 翻译枚举值qt的字符串表示
- 以编程方式获取 C++ 中的转义字符串表示形式
- 将二进制字符的字符串表示转换为字符串的最佳方法
- 如何获取成员函数的字符串表示形式
- 获取用数字字符串表示的树中的所有直接父级/子级
- 我能否获得正式模板参数而不是实际模板参数的字符串表示形式
- 寻找连接对象的字符串表示的惯用方法
- 如何使用zmq/zeromq从传递给python的字符串表示(字节数组)中获取整数/浮点数
- llvm::Type结构的字符串表示形式
- 获取任意文件的字符串表示形式,c++
- int到固定长度的字符串表示形式
- 异常消息:插入错误值的字符串表示
- 是否有一种方法来获得HRESULT值的字符串表示使用win API