Читаем QT 4: программирование GUI на С++ полностью

После создания нами файла переводов .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 в сети Интернет по адресу http://doc.trolltech.com/4.1/linguist-manual.html. Это руководство содержит полное описание интерфейса пользователя для 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();

Перейти на страницу:

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных
C++: базовый курс
C++: базовый курс

В этой книге описаны все основные средства языка С++ - от элементарных понятий до супервозможностей. После рассмотрения основ программирования на C++ (переменных, операторов, инструкций управления, функций, классов и объектов) читатель освоит такие более сложные средства языка, как механизм обработки исключительных ситуаций (исключений), шаблоны, пространства имен, динамическая идентификация типов, стандартная библиотека шаблонов (STL), а также познакомится с расширенным набором ключевых слов, используемым в .NET-программировании. Автор справочника - общепризнанный авторитет в области программирования на языках C и C++, Java и C# - включил в текст своей книги и советы программистам, которые позволят повысить эффективность их работы. Книга рассчитана на широкий круг читателей, желающих изучить язык программирования С++.

Герберт Шилдт

Программирование, программы, базы данных