Qt语言学家-设置应用程序Qt*.ui文件的转换器
我写了一个小的,简单的例子,在菜单中选择一种语言后改变应用程序的语言。虽然connect可以工作(qDebug()打印好消息),但它不会更改我的QLabel上的文本。我使用QtDesigner创建了GUI注意:所有这些文件都在同一个目录中。Im使用Qt5。这是我的密码: *.pro:Qt语言学家-设置应用程序Qt*.ui文件的转换器,qt,translation,linguistics,Qt,Translation,Linguistics,我写了一个小的,简单的例子,在菜单中选择一种语言后改变应用程序的语言。虽然connect可以工作(qDebug()打印好消息),但它不会更改我的QLabel上的文本。我使用QtDesigner创建了GUI注意:所有这些文件都在同一个目录中。Im使用Qt5。这是我的密码: *.pro: QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = qt_pl_en TEMPLATE = app S
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = qt_pl_en
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
TRANSLATIONS += ic.ts
TRANSLATIONS += se.ts
main window.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTranslator>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
retranslate();
QObject::connect(ui->action_Icelandic, SIGNAL(triggered()), this, SLOT(speakIcelandic()));
QObject::connect(ui->action_Swedish, SIGNAL(triggered()), this, SLOT(speakSwedish()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeEvent(QEvent* event)
{
if (event->type() == QEvent::LanguageChange)
{
// retranslate designer form
ui->retranslateUi(this);
// retranslate other widgets which weren't added in designer
retranslate();
}
// remember to call base class implementation
QWidget::changeEvent(event);
}
void MainWindow::retranslate()
{
ui->label->setText(QObject::tr("Hello, world! :-)"));
}
void MainWindow::speakSwedish()
{
QTranslator translator;
translator.load("se.qm");
qApp->installTranslator(&translator);
ui->retranslateUi(this);
qDebug() << "Swedish";
}
void MainWindow::speakIcelandic()
{
QTranslator translator;
translator.load("ic.qm");
qApp->installTranslator(&translator);
ui->retranslateUi(this);
qDebug() << "Icelandic";
}
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
重传();
QObject::connect(ui->action_Icelandic,信号(触发()),此,插槽(SpeakeCelandic());
QObject::connect(用户界面->动作,信号(触发()),此,插槽(speakSwedish());
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void主窗口::changeEvent(QEvent*事件)
{
如果(事件->类型()==QEvent::LanguageChange)
{
//重新传输设计器窗体
用户界面->重传(此);
//重新传输设计器中未添加的其他小部件
重传();
}
//记住调用基类实现
QWidget::changeEvent(事件);
}
void主窗口::重新传输()
{
ui->label->setText(QObject::tr(“你好,世界!”:-));
}
void主窗口::speakSwedish()
{
翻译;
转换器加载(“se.qm”);
qApp->installTranslator(&translator);
用户界面->重传(此);
qDebug()安装转换器(&转换器);
用户界面->重传(此);
qDebug()好了,伙计们,解决方案比你们想象的更简单。添加:
QTranslator *translator;
进入主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
void retranslate();
void changeEvent(QEvent* event);
private slots:
void speakSwedish();
void speakIcelandic();
};
#endif // MAINWINDOW_H
然后,在SpeakeCelandic()
和speakSwedish()
(在main window.cpp)中,只需将实现代码更改为:
bool ok = translator->load("se.qm");
qDebug("translation %d", ok);
qApp->installTranslator(translator);
ui->retranslateUi(this);
qDebug() << "Swedish";
bool ok=translator->load(“se.qm”);
qDebug(“翻译%d”,确定);
qApp->installTranslator(译者);
用户界面->重传(此);
qDebug()好了,伙计们,解决方案比你们想象的更简单。添加:
QTranslator *translator;
进入主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
void retranslate();
void changeEvent(QEvent* event);
private slots:
void speakSwedish();
void speakIcelandic();
};
#endif // MAINWINDOW_H
然后,在SpeakeCelandic()
和speakSwedish()
(在main window.cpp)中,只需将实现代码更改为:
bool ok = translator->load("se.qm");
qDebug("translation %d", ok);
qApp->installTranslator(translator);
ui->retranslateUi(this);
qDebug() << "Swedish";
bool ok=translator->load(“se.qm”);
qDebug(“翻译%d”,确定);
qApp->installTranslator(译者);
用户界面->重传(此);
qDebug()这是为我工作的。(从英语翻译成葡萄牙语)
1) 将其添加到main.cpp
2) 说明是否要翻译MainWindow.ui
使用QT Designer在MainWindow.ui中的每个标签中单击可翻译的勾选框。(在gui中,除了此之外,您无需其他操作)
3)创建如下所述的translation_pt.ts文件。确保将classname放在名称标记中
主窗口
眼镜安装细节
卡里布拉ço dosÓculos酒店
装配工
阿胡斯塔多
装配工姓名
诺姆·多阿胡斯塔多
这是我的作品。(从英语翻译成葡萄牙语)
1) 将其添加到main.cpp
2) 说明是否要翻译MainWindow.ui
使用QT Designer在MainWindow.ui中的每个标签中单击可翻译的勾选框。(在gui中,除了此之外,您无需其他操作)
3)创建如下所述的translation_pt.ts文件。确保将classname放在名称标记中
主窗口
眼镜安装细节
卡里布拉ço dosÓculos酒店
装配工
阿胡斯塔多
装配工姓名
诺姆·多阿胡斯塔多
您好,请告诉我您在哪里定义qApp?在main.cpp中?它应该是全局的,因为我们在mainwindow.cpp中使用它…?您好,请告诉我您在main.cpp中定义qApp?在main.cpp中?它应该是全局的,因为我们在mainwindow.cpp中使用它…?我不熟悉这一点,因此我正在寻找没有所有其他UI元素属性的qt creatorqt designer中显示的rty属性。对于其他看到这一点的人,您必须展开文本属性的下拉箭头以查看translateable
勾选框。我对这一点不熟悉,因此我正在查看qt creator,它没有qt designer中显示的所有其他UI元素的属性。对于其他看到这一点的人,您必须展开文本属性的下拉箭头下拉箭头可查看可翻译
勾选框。
QApplication app(argc, argv);
//Language Translation
//change the prefered language
QString locale = "pt" // say i am doing Portuguese language translation
QString file= app.applicationDirPath() +"/translation_"+locale;
QTranslator translator;
bool result=translator.load(file);
if ((locale != "en") && !result )
{
QMessageBox msgBox;
msgBox.setText("Unable to load language translation files");
msgBox.exec();
}
app.installTranslator(&translator);