Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 94

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

08 createActions();

09 createMenus();

10 retranslateUi();

11 }

Π’ конструкторС ΠΌΡ‹ устанавливаСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ JournalView ΠΊΠ°ΠΊ подкласс QTableWidget. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ настраиваСм нСсколько Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…β€”Ρ‡Π»Π΅Π½ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ:

β€’ пСрСмСнная appTranslator являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ QTranslator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° прилоТСния;

β€’ пСрСмСнная qtTranslator являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ QTranslator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Qt;

β€’ пСрСмСнная qmPath ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ QString ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° прилоТСния.

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ createActions() ΠΈ createMenus() для создания систСмы мСню ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ retranslateUi() для ΠΏΠ΅Ρ€Π²ΠΎΠΉ установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ строк.

01 void MainWindow::createActions()

02 {

03 newAction = new QAction(this);

04 connect(newAction, SIGNAL(triggered()), this, SLOT(newFile()));

05 …

06 aboutQtAction = new QAction(this);

07 connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));

08 }

Ѐункция createActions() создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QAction ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π½ΠΎ Π±Π΅Π· установки тСкстов ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню ΠΈ клавиш быстрого Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ сдСлано Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ retranslateUi().

01 void MainWindow::createMenus()

02 {

03 fileMenu = new QMenu(this);

04 fileMenu->addAction(newAction);

05 fileMenu->addAction(openAction);

06 fileMenu->addAction(saveAction);

07 fileMenu->addAction(exitAction);

08 …

09 createLanguageMenu();

10 helpMenu = new QMenu(this);

11 helpMenu->addAction(aboutAction);

12 helpMenu->addAction(aboutQtAction);

13 menuBar()->addMenu(fileMenu);

14 menuBar()->addMenu(editMenu);

15 menuBar()->addMenu(reportsMenu);

16 menuBar()->addMenu(languageMenu);

17 menuBar()->addMenu(helpMenu);

18 }

Ѐункция createMenus() создаСт ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню, Π½ΠΎ Π½Π΅ устанавливаСт ΠΈΡ… тСкст. И снова это Π±ΡƒΠ΄Π΅Ρ‚ сдСлано Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ retranslateUi().

Π’ сСрСдинС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ createLanguageMenu() для заполнСния мСню Language списком ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… языков. ВскорС ΠΌΡ‹ рассмотрим Π΅Π΅ исходный ΠΊΠΎΠ΄. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ retranslateUi():

01 void MainWindow::retranslateUi()

02 {

03 newAction->setText(tr("&New"));

04 newAction->setShortcut(tr("Ctrl+N"));

05 newAction->setStatusTip(tr("Create a new journal"));

06 …

07 aboutQtAction->setText(tr("About &Qt"));

08 aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));

09 fileMenu->setTitle(tr("&File"));

10 editMenu->setTitle(tr("&Edit"));

11 reportsMenu->setTitle(tr("&Reports"));

12 languageMenu->setTitle(tr("&Language"));

13 helpMenu->setTitle(tr("&Help"));

14 setWindowTitle(tr("Call Center"));

15 }

ИмСнно Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ retranslateUi() Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ tr() для класса MainWindow. Она вызываСтся Π² ΠΊΠΎΠ½Ρ†Π΅ конструктора MainWindow ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ языка прилоТСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ мСню Language.

ΠœΡ‹ устанавливаСм для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню QAction Π΅Π³ΠΎ тСкст, ΠΊΠ»Π°Π²ΠΈΡˆΡƒ быстрого Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π² строкС состояния. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Ρƒ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ мСню QMenu.

РассмотрСнная Ρ€Π°Π½Π΅Π΅ функция createMenus() Π²Ρ‹Π·Ρ‹Π²Π°Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ createLanguageMenu() для заполнСния мСню Language списком языков:

01 void MainWindow::createLanguageMenu()

02 {

03 languageMenu = new QMenu(this);

04 languageActionGroup = new QActionGroup(this);

05 connect(languageActionGroup, SIGNAL(triggered(QAction *)),

06 this, SLOT(switchLanguage(QAction *)));

07 QDir dir(qmPath);

08 QStringList fileNames = dir.entryList(QStringList("callcenter_*.qm"));

09 for (int i = 0; i < fileNames.size(); ++i) {

10 QString locale = fileNames[i];

11 locale.remove(0, locale.indexOf('_') + 1);

12 locale.truncate(locale.lastIndexOf('.'));

13 QTranslator translator;

14 translator.load(fileNames[i], qmPath);

15 QString language = translator.translate("MainWindow",

16 "English");

17 QAction *action = new QAction(tr("&%1 %2")

18 .arg(i + 1).arg(language), this);

19 action->setCheckable(true);

20 action->setData(locale);

21 languageMenu->addAction(action);

22 languageActionGroup->addAction(action);

23 if (language == "English")

24 action->setChecked(true);

25 }

26 }

ВмСсто ТСсткого кодирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ языков ΠΌΡ‹ создаСм ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΠ½ΠΊΡ‚ мСню для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° .qm, располоТСнного Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ прилоТСния translations. Для простоты ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ для английского языка Ρ‚Π°ΠΊΠΆΠ΅ имССтся Ρ„Π°ΠΉΠ» .qm. МоТно ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ clear() для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² QTranslator, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ английский язык.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡΡ‚ΡŒ составляСт прСдставлСниС ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π½Π°Π·Π²Π°Π½ΠΈΠΉ языкам Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ .qm. ΠŸΡ€ΠΎΡΡ‚ΠΎ использованиС сокращСний Β«enΒ» для английского языка ΠΈΠ»ΠΈ Β«deΒ» для Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΎΠ³ΠΎ языка, основанноС Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° .qm, выглядит Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. РСшСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ createLanguageMenu(), состоит Π² Β«ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅Β» строки Β«EnglishΒ» (английский язык) Π² контСкстС Β«MainWindowΒ». Π­Ρ‚Π° строка Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«DeutschΒ» ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΈΠΉ язык, Β«FrancaisΒ» ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° французский язык ΠΈ «♦♦♦» ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° японский язык.

ΠœΡ‹ создаСм ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅ΠΌΠΎΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ мСню QAction Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ язык ΠΈ Ρ…Ρ€Π°Π½ΠΈΠΌ локальноС имя Π² Π΅Π³ΠΎ элСмСнтС Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΡ‹ добавляСм ΠΈΡ… Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QActionGroup, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всСгда ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΠ½ΠΊΡ‚ мСню Language. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QActionGroup Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сигнал triggered(QAction *), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связан с switchLanguage().

01 void MainWindow::switchLanguage(QAction *action)

02 {

03 QString locale = action->data().toString();

04 appTranslator.load("callcenter_" + locale, qmPath);

05 qtTranslator.load("qt_" + locale, qmPath);

06 retranslateUi();

07 }

Π‘Π»ΠΎΡ‚ switchLanguage() вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ язык ΠΈΠ· мСню Language. ΠœΡ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° прилоТСния ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Qt ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ retranslateUi() для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° всСх строк Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

Π’ систСмС Windows Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ мСню Language ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ событий LocaleChange β€” события этого Ρ‚ΠΈΠΏΠ° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Qt ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ измСнСния срСды Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ этого Ρ‚ΠΈΠΏΠ° сущСствуСт Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Qt, Π½ΠΎ фактичСски ΠΎΠ½ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² систСмС Windows, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ измСняСт систСмныС настройки Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ€Π΅Π³ΠΈΠΎΠ½Π° ΠΈ языка Π½Π° ПанСли управлСния). Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий LocaleChange ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ QWidget::changeEvent() ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

01 void MainWindow::changeEvent(QEvent *event)

02 {

03 if (event->type() == QEvent::LocaleChange) {

04 appTranslator.load("callcenter_"

05 + QLocale::system().name(), qmPath);

06 qtTranslator.load("qt_" + QLocale::system().name(), qmPath);

07 retranslateUi();

08 }

09 QMainWindow::changeEvent(event);

10 }

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π²ΠΎ врСмя выполнСния прилоТСния, ΠΌΡ‹ пытаСмся Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ retranslateUi() для обновлСния интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ΠΎ всСх случаях ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ событиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса changeEvent(), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΡˆΠΈΡ… классов Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ заинтСрСсован Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ событий LocaleChange ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… событий.

На этом ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ наш ΠΎΠ±Π·ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° класса MainWindow. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· классов—видТСтов прилоТСния, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ класса JournalView, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ измСнСния ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ для обСспСчСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠΌ динамичСского ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.

01 JournalView::JournalView(QWidget *parent)

02 : QTableWidget(parent)

03 {

04 retranslateUi();

05 }

Класс JournalView являСтся подклассом QTableWidget. Π’ ΠΊΠΎΠ½Ρ†Π΅ конструктора ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ retranslateUi() для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строк Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°. Π­Ρ‚ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ для класса MainWindow.

01 void JournalView::changeEvent(QEvent *event)

02 {

03 if (event->type() == QEvent::LanguageChange)

04 retranslateUi();

05 QTableWidget::changeEvent(event);

06 }

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ пСрСопрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ changeEvent() для Π²Ρ‹Π·ΠΎΠ²Π° retranslateUi() ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ событий LanguageChange. Qt Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ событиС LanguageChange ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ содСрТимого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QTranslator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² QApplication. Π’ нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ это происходит, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ load() для appTranslator ΠΈΠ»ΠΈ qtTranslator Π»ΠΈΠ±ΠΎ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MainWindow::switchToLanguage(), Π»ΠΈΠ±ΠΎ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MainWindow::changeEvent().