Показаны сообщения с ярлыком Qt. Показать все сообщения
Показаны сообщения с ярлыком Qt. Показать все сообщения

суббота, 17 ноября 2012 г.

Интеграция роликов Adobe Flash/Flex в Qt приложение

Комплект компонентов под общим названием Qtitan Multimedia позволяет разработчикам тесно интегрировать в разрабатываемое Qt приложение такие мультимедийные компоненты, как ролики Adobe Flash, Microsoft Silverlight или документы Adobe Reader.

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

Что будет представлять из себя наш пример на этот раз. Мы построим интерфейс пользователя полностью на Flash, а результаты работы пользователя с интерфейсом будем передавать в Qt приложение. Второй частью нашего примера станет обратная задача - из Qt приложения мы передадим данные во Flash ролик.


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

Precompiled Headers в Qt

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

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


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

Qt баг

Под виндой с любой Qt, вплоть до последней, есть такой косяк с тулбаром.
Нужно: QMainWindow с тулбаром. Кнопка на тулбаре должна что-нибудь делать, желательно показывать некий диалог. Диалог должен закрываться по Esc.
Делаем: Быстро быстро клацаем по кнопке тулбара и тут же жмем Esc, закрывая тем самым диалог. На определенной итерации мы увидем, что кнопку тулбара залипла. Так, как будто у нее стоит статус Checkable.
Это легко проверить с Assistant'ом. Вызываем печать через тулбар и отменяем ее по Esc.
Итог: Весьма неприятно. На Qt и так полно нападок от нативщиков, и тут этот очевидный баг.

суббота, 27 февраля 2010 г.

AbstractDateEdit - замена QDateEdit

QDateEdit - компонент для редактирования даты в Qt не умеет задавать пустую дату. Как это ни пародоксально. Пустая дата для него означает 01.01.2000.
Qt сообщество по этому поводу неоднократно сокрушалось и продолжало грызть кактус.
Результат моих грызений - собственный компонент AbstractDateEdit. Он обозван абстрактным, т.к. от него я планирую создать компоненты для работы с другими исчислениями даты. Но этот компонент ни фига не абстрактный а самый обычный, работающий с григорианским счислением. Имеет выпадающий календарик и прочие прелести.
Качать здесь .

Узнаем свой IP под Qt

В файле проекта подключаем QT += network
Используем.
#include <QNetworkInterface>

QString localIP()
{
  QString locIP;
  QList<QHostAddress> addr = QNetworkInterface::allAddresses();
  locIP = addr.first().toString();
  return locIP;
}

* This source code was highlighted with Source Code Highlighter.

пятница, 26 февраля 2010 г.

DirectMap, оператор склейки

Расширим DirectMap оператором добавления.

template <class Key, class Value>
void DirectMap<Key, Value>::operator<<(const DirectMap<Key, Value> & right)
{
  foreach (QString key, right.keys())
  {
   append(key, right[key]);
  }
}


* This source code was highlighted with Source Code Highlighter.

четверг, 25 февраля 2010 г.

DirectMap - упорядоченный map

Недостаток ассоциативного массива QMap в том, что в нем ключи упорядочиваются. Т.е. если я добавлю в QMap" Key2", "Key1", то на выходе получу, сюрприз, "Key1", "Key2". Ключи будут отсортированы.
Такое поведение честно говоря подзае..ло, а альтернативы в Qt нету.
В качестве альтернативы они предлагают использовать QList<QPair<>>. Крайне громоздкая структура.
Наконец я решил сделать класс с удобством пользования как у QMap и с функционалом как у QList, т.е. без автоматического упорядочивания по ключам.

Начнем пожалуй.

четверг, 21 января 2010 г.

Очистка каталога

void cleanFolder(const QString & folder)
{
  QDir dir(folder);
  //Получаем список файлов 
  QStringList lstFiles = dir.entryList(QDir::Files);

  //Удаляем файлы
  foreach (QString entry, lstFiles)
  {
   QString entryAbsPath = dir.absolutePath() + "/" + entry;
   QFile::remove(entryAbsPath);
  }
}


* This source code was highlighted with Source Code Highlighter.

четверг, 26 ноября 2009 г.

Недалекий gcc

Сегодня случилось компилировать кусок с рекурсивным удалением каталогов под Linux.
Здесь про рекурсивное удаление
Компилятор gcc преподнес сюрприз. Не хотел компилировать безобидный кусок кода:
int removeFolder(QDir & dir)
{
......
QString entryAbsPath = dir.absolutePath() + "/" + entry;
removeFolder(QDir(entryAbsPath));
......
}

То есть здесь идет рекурсивный вызов функции removeFolder(QDir &). В качестве параметра я передаю временный объект QDir, предполагая, что компилятор сможет получить ссылку на временный объект. Это не вызывает трудностей у MS Studio 2005, но повергает в шок gcc.
Пришлось за него самому создавать объект. В итоге код пришлось переписать в :
int removeFolder(QDir & dir)
{
......
QString entryAbsPath = dir.absolutePath() + "/" + entry;
QDir dr(entryAbsPath);
removeFolder(dr);
......
}