QApplication 的 installTranslator 方法不更改语言

发布于 2024-12-11 11:31:48 字数 1273 浏览 0 评论 0原文

我重新定义了 QApplication 类并添加了 switchLanguage 插槽,我想在按 but1 时切换语言。 main_ru.qm 和 main_de.qm 正常,100% 工作。但是当我按下按钮时语言不会改变

// main.cpp
#include <QtGui>
#include "qmyapp.h"

int main( int argc, char** argv )
{
    QMyApp app( argc, argv );
    QTranslator translator;
    // задаём файл перевода и директорию
    translator.load( "main_ru.qm", "." );
    app.installTranslator( &translator );
    QWidget wgt;
    QLabel *lbl = new QLabel( QObject::tr( "Hello" ) );
    QPushButton *but1 = new QPushButton( "1" );    
    QVBoxLayout *vbox = new QVBoxLayout;
    QObject::connect( but1, SIGNAL( clicked() ), &app, SLOT( switchLanguage() ) );    
    vbox->addWidget( lbl );
    vbox->addWidget( but1 );
    wgt.setLayout( vbox );
    wgt.show();
    return app.exec();
}

// qmyapp.h
#ifndef QMYAPP_H
#define QMYAPP_H

#include <QApplication>
#include <QtGui>

class QMyApp : public QApplication
{
    Q_OBJECT
public:
    QMyApp(int &argc, char **argv ) : QApplication ( argc, argv ) {}
public slots:
    void switchLanguage( )
    {
        QTranslator* translator = new QTranslator();
        translator->load( "main_de.qm", "." );
        this->installTranslator( translator );
    }
};

#endif // QMYAPP_H

I redefined QApplication class and add switchLanguage slot and i want to switch language when i press but1. main_ru.qm and main_de.qm is normal, 100% working. But language don't change when i press button

// main.cpp
#include <QtGui>
#include "qmyapp.h"

int main( int argc, char** argv )
{
    QMyApp app( argc, argv );
    QTranslator translator;
    // задаём файл перевода и директорию
    translator.load( "main_ru.qm", "." );
    app.installTranslator( &translator );
    QWidget wgt;
    QLabel *lbl = new QLabel( QObject::tr( "Hello" ) );
    QPushButton *but1 = new QPushButton( "1" );    
    QVBoxLayout *vbox = new QVBoxLayout;
    QObject::connect( but1, SIGNAL( clicked() ), &app, SLOT( switchLanguage() ) );    
    vbox->addWidget( lbl );
    vbox->addWidget( but1 );
    wgt.setLayout( vbox );
    wgt.show();
    return app.exec();
}

// qmyapp.h
#ifndef QMYAPP_H
#define QMYAPP_H

#include <QApplication>
#include <QtGui>

class QMyApp : public QApplication
{
    Q_OBJECT
public:
    QMyApp(int &argc, char **argv ) : QApplication ( argc, argv ) {}
public slots:
    void switchLanguage( )
    {
        QTranslator* translator = new QTranslator();
        translator->load( "main_de.qm", "." );
        this->installTranslator( translator );
    }
};

#endif // QMYAPP_H

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ぶ宁プ宁ぶ 2024-12-18 11:31:48

安装新翻译后需要再次调用translate。因此,在调用 switchLangauge() 后,您需要在之前使用过的任何上下文中再次调用 QObject::tr()

You need to call translate again after installing new translations. So after you call switchLangauge() you need to call QObject::tr() once again in whatever context it was used before.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文