Qt - Internationalization - QDialogButtonBox
-
Hallo an alle,
ich habe ein bischen mit der Sprachumschaltung unter Qt rumgespielt und eine kleine Testapplikation geschrieben.
Mein Problem ist jetzt, wie erreiche ich, daß die Button in einer QDialogButtonBox ebenfalls entsprechend der Sprachauswahl angezeigt werden?In dem von mir genutztem Buch >C++ GUI-Programming with Qt4.1< steht etwas von einer von speziel von Qt benutzten Sprachdatei (qm_language.qm).
Wie erzeuge oder woher bekomme ich diese? Vielleicht fehlt ja auch nur diese Datei?Ich selbst nutze Windows XP und Qt4.6
Hier mal mein bisheriger Versuch: Die Methode changeEvent wird aufgerufen.
#ifndef OTHERWINDOW_H #define OTHERWINDOW_H #include <QDialog> #include <QDialogButtonBox> #include <QLabel> #include <QEvent> class OtherWindow : public QDialog { Q_OBJECT public: OtherWindow(QWidget *parent = 0); protected: // MOD:Language begin virtual void changeEvent ( QEvent * event ); // MOD:Language end private slots: void onRejected(); void onAccepted(); private: void createGUI(); void createActions(); void retranslateUi(); private: QDialogButtonBox *buttonBox; QLabel *infoLabel; }; #endif // OTHERWINDOW_H
Hier folgt jetzt die Implementierung:
#include "otherwindow.h" #include <QVBoxLayout> OtherWindow::OtherWindow(QWidget *parent) : QDialog(parent) { createGUI(); createActions(); retranslateUi(); setMinimumSize(100, 160); resize(300, 200); } void OtherWindow::onAccepted() { this->accept(); } void OtherWindow::onRejected() { this->reject(); } void OtherWindow::createGUI() { QWidget *topFiller = new QWidget(this); topFiller->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); infoLabel = new QLabel(this); infoLabel->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); infoLabel->setAlignment(Qt::AlignCenter); QWidget *bottomFiller = new QWidget(this); bottomFiller->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); buttonBox = new QDialogButtonBox(this); buttonBox->setOrientation(Qt::Horizontal); buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setMargin(5); mainLayout->addWidget(topFiller); mainLayout->addWidget(infoLabel); mainLayout->addWidget(bottomFiller); mainLayout->addWidget(buttonBox); setLayout(mainLayout); } void OtherWindow::createActions() { connect(buttonBox, SIGNAL(accepted()), this, SLOT(onAccepted())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(onRejected())); } void OtherWindow::changeEvent(QEvent *event) { if (event->type() == QEvent::LanguageChange) retranslateUi(); QDialog::changeEvent(event); } void OtherWindow::retranslateUi() { setWindowTitle(tr("other Window Dialog")); infoLabel->setText(tr("the infoLabel")); }
vielen Dank schon mal im voraus.
oldmanII
-
Du weißt, wie du die entsprechende Datei einbindest? Wenn ja, dann gut.
Du findest die vorgefertigten Sprachdateien im Qt-Verzeichnis (qt/translations). Der Name ist jeweils "qt_**.qm" (also z.B. qt_de.qm).
-
Besten Dank für die schnelle Hilfe.
Hat sofort funktioniert!