Russian Qt Forum
Ноябрь 26, 2024, 20:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Правильно ли я организовал перевод?  (Прочитано 3184 раз)
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;
   }
}

Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Ноябрь 12, 2013, 13:07 »

- неправильно: объект QTranslator не должен умирать.
- в changeEvent натыканы какие-то гениальные условия. приведу известный пример индусского кода: if (a == 1) a = 1;
- последующие условия лучше проверять через else if, тогда например не придется лепить return.
- грузить перевод по полному пути — неправильно, почти наверняка у конечного пользователя путь будет отличаться.
- вынеси весь код перевода в отдельный метод — тогда не придется дублировать строки в конструкторе.
- (не ошибка) в одном месте ты вызываешь QCoreApplication::installTranslator, в другом — QApplication::installTranslator. лучше использовать один и тот же класс, а то и вовсе qApp.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
CJ1
Гость
« Ответ #2 : Ноябрь 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
Записан
CJ1
Гость
« Ответ #3 : Ноябрь 12, 2013, 13:15 »

На счет пути, да, это пример,

- последующие условия лучше проверять через else if, тогда например не придется лепить return.
это тоже понятно!

Но вобщем ясно, спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.225 секунд. Запросов: 22.