Dynamische Sprachumschaltung bei QDockWidgets



  • Hallo zusammen,

    ich habe eine dynamische Sprachumschaltung in mein Programm integriert und die scheint auch soweit korrekt zu funktionieren. Allerdings werden die Texte von dynamisch erzeugten QDockWidgets nicht geändert.
    Mein Programm erzeugt drei Tabs und füllt diese mit drei Widgets, welche hauptsächlich aus Labeln bestehen:

    QDockWidget* item = addTab( widget1, tr("Tab 1") );
    QDockWidget* item2 = addTab( widget2, tr("Tab 2") );
    QDockWidget* item3 = addTab( widget3, tr("Tab 3") );
    
    this->tabifyDockWidget(item, item2);
    this->tabifyDockWidget(item2, item3);
    
    QDockWidget* MainWindow::addTab( QWidget* widget, QString s_title )
    {
        QDockWidget *item = new QDockWidget( s_title, this );
        item->setWidget( widget );
        addDockWidget( Qt::LeftDockWidgetArea, item );
    
        return item;
    }
    

    Nun habe ich nach dem Beispiel (Link) eine dynamische Sprachumschaltung eingebaut.

    void MainWindow::createLanguageMenu( void )
    {
        QComboBox* languageComboBox = new QComboBox();
    
        QString defaultLocale = QLocale::system().name().replace( "_", "-" );
    
        _m_langPath = QApplication::applicationDirPath();
        _m_langPath.append( _languageDir );
        QDir dir( _m_langPath );
        QStringList fileNames = dir.entryList( QStringList( "translation_*.qm" ) );
    
        for ( int i = 0; i < fileNames.size(); ++i )
        {
            QString locale;
            locale = fileNames[ i ];
            locale.truncate( locale.lastIndexOf( '.' ) );
            locale.remove( 0, locale.indexOf('_') + 1 );
    
            QString lang = QLocale::languageToString( QLocale( locale ).language() );
    
            languageComboBox->insertItem ( i, lang, locale );
            languageComboBox->setItemIcon( i, QPixmap(":/ressources/icons" + _languageDir + lang + ".png") );
        }
    
        languageComboBox->setCurrentIndex( languageComboBox->findData( defaultLocale ) );
    
        connect(languageComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( languageComboBoxSelectionChange( int ) ) );
    
        this->ui->statusBar->addPermanentWidget( languageComboBox );
    }
    
    
    void MainWindow::changeTranslator( QTranslator& translator, const QString& filename )
    {
        qApp->removeTranslator( &translator );
    
        if( translator.load( QCoreApplication::applicationDirPath() + _languageDir + filename ) )
        {
            qApp->installTranslator( &translator );
        }
    }
    
    void MainWindow::loadLanguage( const QString& s_locale )
    {
        if( _m_currLang != s_locale )
        {
            _m_currLang = s_locale;
    
            // Change the current locale
            QLocale locale = QLocale( _m_currLang );
            QLocale::setDefault( s_locale );
    
            QString languageName = QLocale::languageToString( locale.language() );
            changeTranslator( _m_translator, QString( "translation_%1.qm" ).arg( s_locale ) );
            ui->statusBar->showMessage( tr( "Sprache geändert zu: %1" ).arg( languageName) );
        }
    }
    
    void MainWindow::languageComboBoxSelectionChange( int index )
    {
        QComboBox* p_ComboBox = qobject_cast< QComboBox* >( sender() );
    
        // Get the locale from combobox and call translation
        loadLanguage( p_ComboBox->itemData( index ).toString() );
    }
    
    void MainWindow::changeEvent( QEvent* event )
    {
        if( 0 != event  )
        {
            // Switch all Events
            switch( event->type() )
            {
                // This event is triggered if a translator is loaded
                case QEvent::LanguageChange:
                {
                    ui->retranslateUi( this );
                    break;
                }
    
                 // This event is triggered if the system, language changes
                case QEvent::LocaleChange:
                {
                    QString locale = QLocale::system().name();
                    locale.truncate( locale.lastIndexOf( '_' ) );
                    loadLanguage( locale );
                    break;
                }
            }
        }
    
        QMainWindow::changeEvent( event );
    }
    

    Wenn ich die Sprache nun ändere, erhalte ich eine sprachabhängige Nachricht in meiner Statusbar, aber in meinen Tabs wird die Sprache nicht geändert.
    Wo steckt der Fehler, bzw. was habe ich falsch gemacht?

    Danke für die Hilfe!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.