Following by
写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/140819107
如果 ui->treeView
的类型是 QTreeWidget
而不是 QTreeView
,你可以按照以下方式修改代码来支持翻译 QTreeWidget
的项。QTreeWidget
和 QTreeView
的不同之处在于,QTreeWidget
直接管理项,而不需要单独的模型。
修改后的代码
以下是完整的示例代码,展示了如何在VS2022中加载UI文件、初始化QTreeWidget的项,并在加载翻译文件后更新这些项的翻译。
cpp
#include <QApplication>
#include <QTranslator>
#include <QLocale>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QMainWindow>
#include "ui_MainWindow.h" // 假设这是生成的UI文件
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
// Initialize QTreeWidget items
initializeTreeWidgetItems();
// Load the translation file
QTranslator *translator = new QTranslator(this);
if (translator->load("D:\\sourceCode\\SGTenBestBody\\SGTenBestBody_en_US.qm")) {
qApp->installTranslator(translator);
ui->retranslateUi(this);
updateTreeWidgetTranslations(); // Update QTreeWidget items with translated text
}
}
void initializeTreeWidgetItems() {
ui->treeWidget->clear(); // Clear any existing items
QTreeWidgetItem* americaItem = new QTreeWidgetItem(ui->treeWidget);
americaItem->setText(0, tr("America"));
QTreeWidgetItem* usaItem = new QTreeWidgetItem(americaItem);
usaItem->setText(0, tr("USA"));
QTreeWidgetItem* canadaItem = new QTreeWidgetItem(americaItem);
canadaItem->setText(0, tr("Canada"));
ui->treeWidget->addTopLevelItem(americaItem);
}
void updateTreeWidgetTranslations() {
ui->treeWidget->clear(); // Clear the widget before updating items
initializeTreeWidgetItems(); // Reinitialize items to ensure they get translated
}
private:
Ui::MainWindow *ui;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
cpp
解释关键步骤
- 加载UI文件:使用
ui->setupUi(this)
加载由 Qt Designer 创建的 UI 文件。 - 初始化QTreeWidget项:在
initializeTreeWidgetItems
函数中,创建并设置QTreeWidget
的项,使用tr
函数获取可翻译的字符串。 - 加载翻译文件:尝试加载翻译文件并安装翻译器。如果加载成功,调用
ui->retranslateUi(this)
重新翻译 UI,并调用updateTreeWidgetTranslations
更新QTreeWidget
项的翻译。 - 更新QTreeWidget项:在
updateTreeWidgetTranslations
中,首先清除现有的项,然后重新初始化项,以确保它们被正确翻译。
通过这种方式,可以确保 QTreeWidget
中的项根据当前加载的翻译文件进行翻译,并在语言更改时实时更新。