Название: Правильно ли я организовал перевод?
Отправлено: CJ1 от Ноябрь 12, 2013, 09:13
C++ (Qt) #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); p = new QLabel(tr("Русский")); this->ui->gridLayout->addWidget(p,2,0); language = RU; } MainWindow::~MainWindow() { delete ui; } void MainWindow::changeEvent(QEvent * event) { if (event->type() == QEvent::LanguageChange) { if (language == RU) { language = RU; p->setText(tr("Русский")); } if (language == KZ) { language = KZ; p->setText(tr("қазақ тілі")); } } else QWidget::changeEvent(event); } void MainWindow::on_pushButton_clicked() { QTranslator translator; if (ui->comboBox->currentIndex() == 0) { language = RU; QTranslator t; QCoreApplication::installTranslator(&t); ui->retranslateUi(this); return; } if (ui->comboBox->currentIndex() == 1) { language = KZ; if (!translator.load("C:\\Qt\\Qt5.0.2\\Tools\\QtCreator\\bin\\translation\\helloworld_ru")) QMessageBox::critical(0,"", "Не загрузился Перевод"); else { QApplication::installTranslator(&translator); ui->retranslateUi(this); } return; } }
Название: Re: Правильно ли я организовал перевод?
Отправлено: kambala от Ноябрь 12, 2013, 13:07
- неправильно: объект QTranslator не должен умирать. - в changeEvent натыканы какие-то гениальные условия. приведу известный пример индусского кода: if (a == 1) a = 1; - последующие условия лучше проверять через else if, тогда например не придется лепить return. - грузить перевод по полному пути — неправильно, почти наверняка у конечного пользователя путь будет отличаться. - вынеси весь код перевода в отдельный метод — тогда не придется дублировать строки в конструкторе. - (не ошибка) в одном месте ты вызываешь QCoreApplication::installTranslator, в другом — QApplication::installTranslator. лучше использовать один и тот же класс, а то и вовсе qApp.
Название: Re: Правильно ли я организовал перевод?
Отправлено: CJ1 от Ноябрь 12, 2013, 13:13
C++ (Qt) #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); p = new QLabel(tr("Русский")); translator = new QTranslator(this); this->ui->gridLayout->addWidget(p,3,0); language = RU; } MainWindow::~MainWindow() { delete ui; } void MainWindow::changeEvent(QEvent * event) { if (event->type() == QEvent::LanguageChange) { if (language == RU) { language = RU; p->setText(tr("Русский")); } if (language == KZ) { language = KZ; p->setText(tr("қазақ тілі")); } } else QWidget::changeEvent(event); } void MainWindow::on_pushButton_clicked() { if (ui->comboBox->currentIndex() == 0) { language = RU; QApplication::removeTranslator(translator); ui->retranslateUi(this); return; } if (ui->comboBox->currentIndex() == 1) { language = KZ; if (!translator->load("C:\\Qt\\Qt5.0.2\\Tools\\QtCreator\\bin\\translation\\helloworld_ru")) QMessageBox::critical(0,"", "Не загрузился Перевод"); else { QApplication::installTranslator(translator); ui->retranslateUi(this); } return; } }
Вот! Я теперь оставляю жить QTranslator
Название: Re: Правильно ли я организовал перевод?
Отправлено: CJ1 от Ноябрь 12, 2013, 13:15
На счет пути, да, это пример,
- последующие условия лучше проверять через else if, тогда например не придется лепить return. это тоже понятно!
Но вобщем ясно, спасибо!
|