вторник, 3 сентября 2013 г.

QHuman DateEdit

QHuman DateEdit 

Альтернативный компонент Qt для ввода даты. Есть возможность ввода пустой или неполной даты.

Недостатки стандартного QDateEdıt
Стандартный QDateEdit не позволяет ввести неполную или пустую дату. Датой по умолчанию считается 1 января 2000 года. Нельзя очистить поле, там всегда будет 01.01.2000.

QHuman DateEdit





вторник, 2 июля 2013 г.

Компонент "Панель задач"

Наткнулся на qt-apps.org на компонент для Qt "Панель задач" (Task Panel). Подобные панели используются в проводнике Windows. По крайней мере использовались в XP, в семерке такой панели уже существенно меньше. Но тем не менее, может пригодиться.

Лицензия LGPL, то есть, можно использовать в коммерческих приложениях.
Проблем с использованием не обнаружил, единственно, что не понравилось - закругления уголков, немного подрихтовал напильником, чтобы было без сглаживания уголков.
Возможности компонента:
  • Группировка задач по блокам.
  • Возможность добавить свой виджет в блок. Стандартное решение - это размещение ссылок в блоках.
  •  Эффекты анимации при сворачивании/разворачивании блоков.
  • Возможность задать свою цветовую схему. По умолчанию предлагаются две стандартные схемы в стиле Windows XP.

среда, 6 февраля 2013 г.

Глобальный перехват событий

Если нужно поставить глобальный обработчик на все события то нужно переопределить метод
virtual boolnotify ( QObject * receiver, QEvent * e )

класса QApplication.
Например, если мы хотим перехватить все перемещения мышки, то нам поможет такой класс

class MyApp : public QApplication
{
public:
   MyApp(int & argc, char ** argv) : QApplication(argc, argv) {}
   
   virtual bool notify(QObject * receiver, QEvent * e)
   {
      if (e->type() == QEvent::MouseMove)
      {
         //обрабатываем событие
      }
      return QApplication::notify(receiver, e);
   }
};

понедельник, 4 февраля 2013 г.

Отключить системную кнопку close

Отключить системную кнопку Close у окна можно установив окну флаги:

  setWindowFlags(Qt::Window
     | Qt::WindowMinimizeButtonHint     
     | Qt::WindowMaximizeButtonHint     
     | Qt::CustomizeWindowHint);

суббота, 29 декабря 2012 г.

Подключаем интерфейс в стиле Microsoft Ribbon


Впервые Microsoft анонсировала интерфейс Ribbon (что переводится как "лента") в 2007 году в новом выпуске MS Office. Новый интерфейс разительно отличался от привычных меню и тулбаров и не всем пришелся по вкусу.

У многих пользователей были трудности при переобучении, но с тех пор прошло уже много лет и пользователи как-то попривыкли к ленточному интерфейсу. Microsoft продолжает использовать риббоны в своих продуктах, в Windows 7, например, почти все стандартные приложения (MS Paint, WordPad) имеют интерфейс Ribbon.

Поэтому, чтобы быть в тренде, нужно использовать такой интерфейс в своих приложениях под Windows. Это сразу возвышает ваш программный продукт в глазах пользователей, т.к. сразу видно, что вы движетесь вперед, а не топчетесь на одном месте.

Для программистов на Qt/C++ существует готовое решение, которое называется Qtitan Ribbon devmachines.ru.
Сегодня мы будем подключать Qtitan Ribbon к нашему тестовому приложению на Qt.

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

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

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

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

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


четверг, 25 октября 2012 г.

Интеграция Silverlight в Qt приложения (пример использования)

В прошлой статье об интеграции Silverlight роликов в приложения на Qt, я описал библиотеку Qtitan Multimedia, с помощью которая оная интеграция и выполняется.
Ниже я приведу практический пример использования библиотеки Qtitan Multimedia.
Пример использования
В качестве примера создадим интерактивный баннер на Silverlight и подружим его с Qt приложением. Из приложения мы будем передавать наше имя в Silverlight и оно будет в нем использоваться. А в ролике мы предоставим возможность пользователю проголосовать за любимую технологию и передадим результаты голосования в приложение.

среда, 26 сентября 2012 г.

QZip, OSDab Zip, QuaZip и Microsoft Word 2007

Понадобилось мне тут генерить отчет в формате Microsoft Word 2007.
Файл docx это, как известно, набор xml-файлов и каталогов, пожатых zip-ом.
Ничтоже сумнящеся, пытаюсь пожать это дело OSDaB Zip - и упс. Word такой файл понимать отказывается. Далее беру QZip. Снова упс. QuaZip - ура, победа.
То есть, каталог пожатый QuaZip MS Word прекрасно читает, а остальные - увы. Версия zlib одна и та же. В чем причина я пока и не разобрался. Размер файла docx, пожатый разными zip-ами всегда разный.
До этого генерил отчеты для OpenOffice.org, там формат похож - тоже набор каталогов и xml-файлов пожатый zip. Тогда сжимал OSDaB Zip'ом и OpenOffice Writer читал такой файл без проблем.

понедельник, 30 июля 2012 г.

QSqlQueryModel - просмотр базы данных с более 10000 записей

Стандартный QSqlQueryModel мало пригоден для просмотра больших баз данных. Модель устроена так, что изначально подгружает 256 записей, и по мере прокрутки таблицы вниз подгружает порциями еще по 256 записей. Всё это сильно лагает и на большой БД неюзабельно.
Можно использовать canFetchMore и fetchMore для загрузки всех данных, но это займет много времени и вдобавок все записи поместятся в память и выгрузка займет приличное время. В итоге - паузы при загрузке и выгрузке данных.
Но можно использовать курсоры БД, то есть QSqlQuery. Выполнение запроса на выборку (SELECT) занимает немного времени и в итоге у нас есть курсор QSqlQuery, который можно вертеть вперед (next()), назад (prevoius()) и в произвольное место (seek()).
Так как же организовать быструю табличную навигацию по БД?

вторник, 24 июля 2012 г.

Протокол OAuth



Цитата из Википедии
OAuth — открытый протокол авторизации, который позволяет предоставить третьей стороне ограниченный доступ к защищенным ресурсам пользователя без необходимости передавать ей (третьей стороне) логин и пароль. Например, пользователь, который хочет предоставить сервису социальной сети доступ к книге контактов своего почтового аккаунта, не должен сообщать сети свой пароль от почты. Вместо этого он проходит авторизацию непосредственно в почтовом сервисе, который (с разрешения пользователя или администратора сервиса) предоставляет сервису социальной сети полномочия доступа к адресной книге.


Я расскажу как использовать этот протокол для отправки изображений в Twitter из десктопного приложения на Qt.