Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt语言学家-设置应用程序Qt*.ui文件的转换器_Qt_Translation_Linguistics - Fatal编程技术网

Qt语言学家-设置应用程序Qt*.ui文件的转换器

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

我写了一个小的,简单的例子,在菜单中选择一种语言后改变应用程序的语言。虽然connect可以工作(qDebug()打印好消息),但它不会更改我的QLabel上的文本。我使用QtDesigner创建了GUI注意:所有这些文件都在同一个目录中。Im使用Qt5。这是我的密码:

*.pro:

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);