gpt4 book ai didi

qt - Qt UI 文件如何使用 Qt Linguist?

转载 作者:行者123 更新时间:2023-12-04 23:24:02 29 4
gpt4 key购买 nike

我正在使用 Qt 语言学家翻译一个 ui 文件。我使用 lupdate 获取了它的 ts 文件,并翻译了这些单词和短语。现在我想将它添加到我的代码中,但我从它的教程中发现我似乎必须将 tr() 添加到我代码中的每个单词和短语。我理解正确吗?我可以只加载翻译后的 qm 文件一次来进行翻译吗?如果是这样,我该如何在这个 ui 文件中做到这一点?

提前致谢。

更新

按照 Jens 提到的更改属性后,在我的 ui 头文件中我可以看到如下句子:

buttonSetupData->setText(QApplication::translate("MainWindow", "Set Data", 0, QApplication::UnicodeUTF8));

在 Ajith 的回答之后,我更改了代码,现在 ui_main.h 文件中的 retranslateUi 函数如下所示:

void retranslateUi ( QMainWindow *MainWindow )
{
QTranslator translator;
translator.load ( " ...\Test.ts " );
QApplication::installTranslator ( &translator );

MainWindow->setWindowTitle ( QApplication::translate ("MainWindow", "The Sentioscope - Beta v2.0 for Soccer", 0, QApplication::UnicodeUTF8));

...
}

但是还是不行。

最新更新

我当前读取“.qm”文件的函数是这样的:

void MainWindow::translate()
{
QTranslator translator;
translator.load ( "Test.qm", "D:\\" );
qApp->installTranslator ( &translator );
retranslateUi ( this );
}

然后我这样调用这个函数:

MainWindow::MainWindow ( QWidget *parent ) : QMainWindow ( parent )
{
setupUi(this);
translate();
}

在 Ajith 的最新回答之后,我更改了这种形式的警告/消息框的每个字符串(例如):

QMessageBox::warning( this, QMessageBox::tr("ERROR"), QMessageBox::tr("Invalid IP adress") );

通过 lupdate 我可以读取所有这些字符串,进行翻译并将它们保存在一个 qm 文件中。现在的问题是,它可以为 ui 翻译这些字符串,但不能为执行后的警告/消息框翻译。

最佳答案

我不完全确定您想从这个问题中完成什么。我认为您正在寻找一种在运行时从 C++ 代码加载“qm”文件的方法。如果是这样,您需要做的是使用 QTranslator类..

QTranslator translator;
translator.load("file.qm", "dir");
qApp->installTranslator(&translator);

更新

这对我有用..

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
isChinese(false)
{
ui->setupUi(this);
msgbox = new QMessageBox(QMessageBox::NoIcon, "", "", QMessageBox::NoButton, this);
pbtn = msgbox->addButton("Ok", QMessageBox::AcceptRole);

doRetranslate();

QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(doTranslate()));
QObject::connect(ui->pushButton, SIGNAL(clicked()), msgbox, SLOT(show()));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::doTranslate()
{
QTranslator translator;
if (!isChinese) {
translator.load("test_zh_TW.qm", "../TestTranslator");
qApp->installTranslator(&translator);
isChinese = true;
} else {
translator.load("", ""); // Default is english
qApp->installTranslator(&translator);
isChinese = false;
}
ui->retranslateUi(this);
doRetranslate();
}

void MainWindow::doRetranslate()
{
msgbox->setWindowTitle(QObject::tr("ERROR"));
msgbox->setText(QObject::tr("Invalid IP adress"));
pbtn->setText(QObject::tr("Ok"));
}

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QPushButton>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

void doRetranslate();
public slots:
void doTranslate();

private:
Ui::MainWindow *ui;
bool isChinese;
QMessageBox *msgbox;
QPushButton *pbtn;
};

#endif // MAINWINDOW_H

主窗口.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>100</x>
<y>70</y>
<width>181</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Hello World!</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>140</x>
<y>120</y>
<width>93</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>translate</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>23</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections>
<connection>
<sender>pushButton</sender>
<signal>clicked()</signal>
<receiver>label</receiver>
<slot>update()</slot>
<hints>
<hint type="sourcelabel">
<x>199</x>
<y>165</y>
</hint>
<hint type="destinationlabel">
<x>206</x>
<y>114</y>
</hint>
</hints>
</connection>
</connections>
</ui>

关于qt - Qt UI 文件如何使用 Qt Linguist?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14135416/

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