我重新定义了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

最佳答案

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

07-24 09:54