c++ - Qt:用 qml 对象连接翻译器
问题描述
我开始有一个相当不错的软件,但我想翻译它,所以我在我的设置菜单中添加了一个组合框。当用户在组合框中选择他的语言时,我希望程序进行翻译。我已经使用 Linguist 翻译并生成了 TS 和 QM 文件。我在我的 .pro 中链接了 ts 文件。
主文件
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
Translator translator(&engine);
engine.rootContext()->setContextProperty("translator", &translator);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
翻译器.h
class Translator : public QObject
{
Q_OBJECT
Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged)
public:
explicit Translator(QQmlEngine *engine)
{
translator = new QTranslator(this);
engine = engine;
}
QString getEmptyString()
{
return "";
}
Q_INVOKABLE void selectLanguage(QString language)
{
if(language == QString("en"))
{
translator->load(":/translation/lang_en.qm");
qGuiApp->installTranslator(translator);
engine->retranslate();
}
if(language == QString("fr"))
{
qGuiApp->removeTranslator(translator);
engine->retranslate();
}
emit languageChanged();
}
signals:
void languageChanged();
private:
QTranslator *translator;
QQmlEngine *engine;
};
main.qml
ComboBox {
id: comboLangage
currentIndex: 0
model: [ qsTr("Français"), qsTr("Anglais") ]
width: 200
onActivated: {
if(comboLangage.currentIndex == 0){
selectLanguage("fr"); // how do i call this method ?
}
else if(comboLangage.currentIndex == 1){
selectLanguage("en")
}
}
}
我尝试使用 qmlRegisterType("issou.translator", 1, 0, "Translator"); 然后将其导入 qml。然后我可以在我的 qml 中创建一个 Translator 对象并调用一些函数。但这没有用。有什么建议么 ?
谢谢你。
解决方案
推荐阅读
- botframework - 在 WestUS 地区创建的 Luis 服务可以被亚洲和澳大利亚的用户查询吗?
- python - 如何从 Jupyter Notebook 向 shell 命令“git push”输入密码?
- docker - 主机上的 Docker 存储
- python - 使用python中的模型进行列表理解
- android - 用于 android / iOS 开发的 FLUTTER 中的 HTML 解析
- python - 使用 GridSearchCV 调整 Keras 超参数 - 无法调整密集层中的“kernel_initializer”
- powerbi - 在查询编辑器 Power BI 中使用条件删除基于多列的重复值
- c - 如何在 mac 上使用 libxcb?
- anaconda - matplotlib 在 Jupyter 实验室中不起作用
- python - Django如何通过for循环和数组在html中传递批量值?