Чтение онлайн

на главную - закладки

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

Для запуска Qt Linguist выберите пункт Qt by Trolltech v4.x.y | Linguist в меню Start в системе Windows, введите linguist в командной строке в системе Unix или дважды щелкните по Linguist в системе Mac OS X Finder. Для добавления перевода в файл .ts выберите пункт меню File | Open и укажите файл для перевода.

С левой стороны главного окна утилиты Qt Linguist отображается список всех контекстов переводимого на другие языки приложения. Для приложения Электронная таблица этими контекстами являются «FindDialog», «GoToCellDialog», «MainWindow», «SortDialog» и «Spreadsheet». Справа вверху выводится список всех исходных строк для текущего контекста.

Каждая исходная строка сопровождается переводом и флажком Done (готово). Справа по центру находится область, где мы можем вводить перевод текущей исходной строки. Справа внизу отображаются подсказки по переводу, которые автоматически генерируются Qt Linguist.

После создания нами файла переводов .ts необходимо его преобразовать в двоичный файл .qm, чтобы он был понятен для QTranslator. Для этого в Qt Linguist выберите пункт меню File | Release. Обычно мы начинаем с перевода только нескольких строк и затем выполняем приложение с применением файла .qm, чтобы убедиться, что все работает правильно.

Рис. 17.2. Qt Linguist в действии.

Если мы хотим заново сгенерировать файлы .qm для всех файлов .ts, мы можем запустить утилиту lrelease из командной строки следующим образом:

lrelease -verbose spreadsheet.pro

Если мы выполняли перевод 19 строк на французский язык и отметили флажком Done 17 из них, утилита lrelease выдаст следующий результат:

Updating 'spreadsheet_de.qm'...

Generated 0 translations (0 finished and 0 unfinished)

Ignored 98 untranslated source texts

Updating 'spreadsheet_fr.qm"...

Generated 19 translations (17 finished and 2 unfinished)

Ignored 79 untranslated source texts

Флажок Done игнорируется утилитой lrelease; он может использоваться переводчиками для идентификации законченных переводов и тех, перевод которых необходимо выполнить заново. Непереведенные строки при выполнении приложения выводятся на языке оригинала.

Когда мы модифицируем исходный код приложения, файлы перевода могут устареть. Решение этой проблемы заключается в повторном выполнении утилиты lupdate, обеспечении перевода новых строк и повторной генерации файлов .qm. Одни группы разработчиков могут посчитать удобным частое выполнение утилиты lupdate, а другие могут захотеть это делать только для почти готового программного продукта.

Утилиты lupdate и Qt Linguist достаточно «умные». Переводы, которые с какого-то момента не стали использоваться, сохраняются в файлах .ts на случай, если они потребуются когда-нибудь в будущем. При обновлении файлов .ts утилита lupdate использует «интеллектуальный» алгоритм слияния, позволяющий переводчикам сэкономить много времени при работе с текстом, который совпадает или подобен в различных контекстах.

Более подробную информацию относительно Qt Linguist, lupdate и lrelease можно найти в руководстве по Qt Linguist в сети Интернет по адресуЭто руководство содержит полное описание интерфейса пользователя для Qt Linguist и учебное пособие для поэтапного обучения программистов.

Глава 18.

Многопоточная обработка

Обычные приложения с графическим интерфейсом имеют один поток (thread) выполнения и производят в каждый момент времени одну операцию. Если пользователь через интерфейс пользователя вызывает продолжительную операцию, интерфейс, как правило, «застывает» до завершения операции. В главе 7 («Обработка событий») даются некоторые способы решения этой проблемы. Применение многопоточной обработки — еще один способ решения данной проблемы.

В многопоточном приложении графический пользовательский интерфейс выполняется в своем собственном потоке, а обработка осуществляется в одном или в нескольких других потоках. В результате такие приложения способны реагировать на действия пользователя даже при продолжительной обработке. Еще одним преимуществом многопоточной обработки является возможность в многопроцессорных системах одновременно выполнять несколько потоков на разных процессорах, увеличивая производительность.

В данной главе мы сначала продемонстрируем способы создания подкласса QThread и способы применения классов QMutex, QSemaphore и QWaitCondition для синхронизации потоков. Затем мы рассмотрим способы взаимодействия вторичных потоков с главным потоком в ходе цикла обработки событий. Наконец, мы завершим главу обзором классов Qt, объясняя, какие из них могут использоваться во вторичных потоках.

Многопоточная обработка представляет собой обширную тему, которой посвящается много книг. В данной главе предполагается, что вам уже известны принципы многопоточного программирования, поэтому основное внимание уделяется методам разработки многопоточных приложений средствами Qt, а не теме потоков выполнения в целом.

Создание потоков

Обеспечить многопоточную обработку в приложении Qt достаточно просто: мы только создаем подкласс QThread и переопределяем его функцию run. Чтобы показать, как это работает, мы начнем с рассмотрения программного кода очень простого подкласса QThread, который периодически выводит на консоль заданный текст:

01 class Thread : public QThread

02 {

03 Q_OBJECT

04 public:

05 Thread;

06 void setMessage(const QString &message);

07 void stop;

08 protected:

09 void run;

10 private:

11 QString messageStr;

12 volatile bool stopped;

12 };

Класс Thread наследует QThread и переопределяет функцию run. Он содержит две дополнительные функции: setMessage и stop.

Переменная stopped объявляется со спецификатором volatile (изменчивый), поскольку доступ к ней осуществляется из разных потоков, и мы хотим быть уверенными, что всегда получаем ее обновленное значение. Если мы опустим ключевое слово volatile, компилятор может оптимизировать доступ к этой переменной, что, возможно, приведет к получению неправильного результата.

01 Thread::Thread

02 {

03 stopped = false;

Поделиться:
Популярные книги

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Кай из рода красных драконов

Бэд Кристиан
1. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов

Хозяйка Проклятой Пустоши. Книга 2

Белецкая Наталья
2. Хозяйка Проклятой Пустоши
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка Проклятой Пустоши. Книга 2

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Потусторонний. Книга 2

Погуляй Юрий Александрович
2. Господин Артемьев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Потусторонний. Книга 2

Чапаев и пустота

Пелевин Виктор Олегович
Проза:
современная проза
8.39
рейтинг книги
Чапаев и пустота

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Лютая

Шёпот Светлана Богдановна
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Лютая

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5