【发布时间】:2020-08-18 07:44:07
【问题描述】:
我正在尝试制作一个在大型树模型菜单结构中实时翻译文本的应用程序,方式与:https://code.qt.io/cgit/qt/qtbase.git/tree/examples/widgets/itemviews/simpletreemodel?h=5.15
item 的“数据”是一个 QString,翻译如下:
root = new MenuObject(tr("Main menu"));
子元素的附加如下:
root->appendChild(new MenuObject(tr("Test 1")))
.appendChild(new MenuObject(tr("Test 2")))
我正在使用 QML 来显示这些,使用 qmllistpoprerty 来显示这些菜单,例如:
Q_PROPERTY(QQmlListProperty<MenuObject> list READ getList NOTIFY listChanged);
QML 是一个简单的 ListView,带有一个委托标签,显示带有 q_property 的 MenuObjects 的描述:
Q_PROPERTY(QString description READ getDescription CONSTANT);
要更改语言,我正在使用将翻译文件导入翻译器的函数,然后是:
installTranslator(translator);
engine.retranslate();
现在这确实适用于简单的 q_properties,例如:
Q_PROPERTY(QString header READ getHeader NOTIFY listChanged);
在哪里
QString MainMenu::getHeader(){
return tr("Header");
}
但我无法让翻译适用于树模型中的项目。任何帮助表示赞赏。
【问题讨论】:
-
为什么不用模型而不是
QQmlListProperty?模型最初支持数据更改处理等。 -
问题不在于更改数据。问题在于将其中的任何内容即时翻译成不同的语言。
-
我也尝试过直接暴露为 q_property 的 MenuObject,而不会在使用 qmlengine 重新翻译时更改文本。
标签: c++ qt qml qt-linguist