понедельник, 21 мая 2012 г.

Добавление цели для make clean

В pro файл добавляем
QMAKE_CLEAN += filename

Это нужно чтобы make по команде make clean знал какие файлы удалить. Например, бинарник.

пятница, 23 марта 2012 г.

Precompiled Headers в Qt

"Предварительно скомпилированные заголовки - средство повышения производительности, поддерживаемое некоторыми компиляторами при компиляции стабильного тела кода и сохранении состояния скомпилированного кода в бинарном файле. Во время последующих компиляций компилятор будет загружать сохраненное состояние и продолжать компиляцию указанного файла. Каждая последующая компиляция проходит быстрее, поскольку не нужно перекомпилировать стабильный код."
(c) Qt Doc
Предварительно скомпилированный заголовок должен содержать код, который является стабильным и статичным во всем вашем проекте.
В Qt к таким частям относятся инклуды Qt-классов.

Кроме повышения производительности, подключение Precompiled Headers позволяет не писать инклуды Qt классов в коде.
Что для этого нужно.
1) Все инклуды Qt клаcов выносятся в отдельный файл.
2) Редактируется файл проекта.
3) В коде больше не нужно включать Qt классы.


среда, 14 марта 2012 г.

Qt Widget просмотра PDF файлов

Я уже писал о том как читать и писать файлы в pdf с помощью библиотеки podofo. Осталось научиться их отображать. Начал анализировать вопрос и попался топик на сайте prog.org.ru.
Приведу это решение здесь.


вторник, 13 марта 2012 г.

Воспроизведение звука в Qt

Qt предоставляет три пути для воспроизведения звука.
  1. Класс QSound
  2. Класс QAudioOutput
  3. Модуль QtPhonon
Самым удобным кажется класс QSound. Достаточно вызвать статическую функцию класса play(const QString & filename) для проигрывания файла filename. Воспроизводимый формат - wav. Но у QSound есть недостаток - он не умеет воспроизводить файлы из ресурсов. Об этом прямо написано в документации последней версии (4.8) 
Note that QSound does not support resources. This might be fixed in a future Qt version.
Поэтому, если захочется хранить ваши звуки в ресурсах, ничего не получится. Выход, конечно, есть - написать костыли. А именно - скидывать файл из ресурсов во временную папку и воспроизводить уже оттуда.

Вторым методом является класс QAudioOutput.

понедельник, 12 марта 2012 г.

Эффективный способ самоудаления

Как exe-шнику удалить самого себя? Есть много способов. Самый эффективный и надежный как оказалось - это связка cmd файла и WScript-скрипта. Начиная с Windows XP можно выполнять WScript-скрипты. Этим и воспользуемся.
Кстати, для чего это может понадобиться? Например, если вы пишете свой Uninstall, то вам потом нужно будет почистить и за собой.
Приступим.

пятница, 30 сентября 2011 г.

Вставка QWidget в QTableWidget

Надо бы рассказать о способе вставки QWidget в QTableWidget.
Вообще, я не очень люблю QTableWidget, т.к. больше привык к QTableView и QAbstractItemModel, QStyledItemDelegate. Но в случае если быстро нужна таблица, связанная с одной готовой моделью, то можно воспользоваться QTableWidget. В принципе, QTableWidget порожден от QTableView и умеет всё то, что умеет и QTableView.

Перейдем к делу. Точнее к постановке задачи.
Надо вставить в ячейки QTableWidget виджеты. Пример на картинке.


То есть, виджеты всегда на виду, а не скрываются, как это делается в случае с делегатом.
В первом столбце банальный QLineEdit, во втором - пользовательский виджет для ввода даты.

Как это сделать?
В коде я приведу работу с QTreeWidget, а не с QTableWidget, но разницы особой нет.

пятница, 17 июня 2011 г.

Добавление своего типа в QVariant

Хороший тип QVariant. Это может быть int, double, QDate, QMap, и еще полсотни типов.
Добавим к этим типам собственный класс или структуру, чтобы с ней можно было бы общаться как с другими типами - помещать и извлекать из QVariant.

class SomeClass
{
//всё что нужно
};
Q_DECLARE_METATYPE(SomeClass)


Итак, достаточно после определения класса вызвать макрос Q_DECLARE_METATYPE()
Что это дает?

среда, 15 июня 2011 г.

Обновилась PoDoFo

Обновилась библиотека podofo для работы с PDF до версии 0.9.1.
Последнюю версию я использовал 0.8.2.
Проблем со сборкой не было, но чтобы узнать список изменений пришлось сливать исходники из SVN и читать SVN ChangeLog, ибо в архиве никаких Changes'ов не было.
Итак, what news.
В основном добавились патчи, исправляющие баги, либо ускоряющие работу библиотеки с большими pdf-файлами.
Изменен принцип сбоки библиотек, вместо двух сделали одну. Но это так, всё по мелочи.

Главное, что библиотека хорошо работает как и прежде.

вторник, 14 июня 2011 г.

QProgressIndicator

На qtapps.org есть много интересных виджетов, написанных обычными пользователями. Распространяется свободно под LGPL.
Например, QProgressIndicator - интересная крутилка прогресса в стиле FireFox.
Пример использования:
progress_ = new QProgressIndicator(this);
progress_->setAnimationDelay(50);

progress_->startAnimation();

* This source code was highlighted with Source Code Highlighter.


В итоге колесико будет крутиться пока ему не скажут stopAnimation()

вторник, 19 октября 2010 г.

Интеграция Silverlight в Qt приложения

Хотелось бы опубликовать статью на русском языке об интеграции роликов Silverlight в Qt приложения.
Для этого используется библиотека Qtitan, она коммерческая, увы, но может быть кого-то заинтересует. К тому же ее вполне можно использовать в демо-режиме в некоммерческих целях.
Статья публикуется с негласного соглашения авторов фреймворка Qtitan Multimedia.

Интеграция Silverlight в Qt приложения


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

Мы тоже любим Qt, и мы захотели расширить наш любимый фреймворк возможностью работы с современной векторной графикой, например, мы захотели интегрировать в приложение ролики Adobe Flash или Microsoft Silverlight.