Информационная безопасность → DLL HiJacking в Qt-приложениях
В марте 2011 года я писал о DLL HiJacking в VirtualBox. Тогда разработчики сообщили, что проблема не в их продукте, а в Qt, на котором основана их продукция.
Наконец, найдя время, я решил проверить так ли это. Оказалось, что так.
Мной были проверены:
И они оказались уязвимы.

Видео демонстрация уязвимости (видео без звука):
Наконец, найдя время, я решил проверить так ли это. Оказалось, что так.
Мной были проверены:
И они оказались уязвимы.

Видео демонстрация уязвимости (видео без звука):
Qt Software → Трюки с моделями в Qt из песочницы
Всем привет!
В этой небольшой статье я научу вас, одному интересному трюку с моделями, который можно реализовать с помощью MVC фреймворка Qt.
Двухуровневая модель дерева:
Модель списка:
В результате трюка мы получим модель объединяющую две вышеприведенные модели:
И так как же это сделать? Я думаю вы уже догадались что сделать это можно прибегнув к помощи QAbstractProxyModel. А вот и нет! К сожалению стандартный класс QAbstractProxyModel может преобразовать лишь одну исходную модель (что тоже неплохо). Поэтому мы напишем свою ModelJoinerProxy, которая будет компоновать наши две исходные модели в одно целое.
И так приступим:
В этой небольшой статье я научу вас, одному интересному трюку с моделями, который можно реализовать с помощью MVC фреймворка Qt.
Исходные данные для трюка.
Двухуровневая модель дерева:
|Parent 1
-----Child 1
-----Child N
|Parent N
-----Child 1
-----Child N
Модель списка:
Item1
Item2
Item3В результате трюка мы получим модель объединяющую две вышеприведенные модели:
|Parent 1
------Child 1
------Child N
|Parent N
------Child 1
------Child N
|Item1
|Item2
|Item3Приступим к реализации.
И так как же это сделать? Я думаю вы уже догадались что сделать это можно прибегнув к помощи QAbstractProxyModel. А вот и нет! К сожалению стандартный класс QAbstractProxyModel может преобразовать лишь одну исходную модель (что тоже неплохо). Поэтому мы напишем свою ModelJoinerProxy, которая будет компоновать наши две исходные модели в одно целое.
И так приступим:
Qt Software → Qt приложения в Mac App Store
Возможно многие уже задавались вопросом о возможности создания Qt приложения для Mac App Store или отправке уже существующего. Я давно хотел провести пробу этой возможности - как известно Apple и Nokia развивают сейчас разные экосистемы языков/библиотек и можно ожидать много подводных камней связанных с пропуском Qt приложения. Тем не менее это оказалось не так сложно и хотя повозится пришлось достаточно, приложение прошло без проблем и с первого раза.
Qt Software → Создание гибридного Qt Quick и C++ приложения из песочницы
Добрый день, %username%!
Небольшая предыстория:
Некоторое время назад делал знакомому лабораторную, тематика которой – код Хэмминга. Программа представляла собой обыкновенное Qt приложение с минимальным набором контролов. Сдача прошла успешно, прошло некоторое время, и его теперь другу необходимо тоже сдать лабораторную на эту же тематику. Ту же программу, очевидно, сдавать нельзя. Тут возникает вопрос – как сделать программу с тремя кнопками и двумя текстбоксами непохожей на предыдущую? Мне в голову пришла мысль переписать интерфейс с помощью Qt Quick, а логику и расчеты программы оставить в С++, а заодно и рассказать интересующимся людям, как я обычно делаю подобные вещи. По Qt Quick не так много литературы, тем более на русском, так что очень надеюсь, что данная статья будет полезна и интересна.
DIY или Сделай Сам → Yet another WebMoney Keeper
- Когда-то все началось с tinywm.com — habrahabr.ru/blogs/i_am_advertising/37888/
- Потом, WebMoney забрала его у меня с потрохами — habrahabr.ru/blogs/i_am_advertising/43440/
- Я долго не знал, чем занять свои руки...
Продолжение под катом (много картинок).
Qt Software → QtSpeech, доступ к text-to-speech
Хочу представить небольшой но удобный модуль для кросс-платформенного использования TTS(text-to-speech). На данный момент поддерживаются основные платформы:
* Windows, используя SAPI,
* Unixes, используя Festival проект,
* MacOSX, используя SpeechSynthesis
Так как для Windows и Mac используются родныe API то все голосовые движки установленные в систему будут автоматически вам доступны. Для Unix всё не так радужно, нет какой-то общей системы, апи, поэтому был просто выбран проект Festival который даёт неплохое качество для английского языка и лицензию LGPL. На Mac вы всегда можете расчитывать на отличный голос Alex.
Использование библиотеки очень простое — итак ваше приложение наконец скажет «Hello World!».
* Windows, используя SAPI,
* Unixes, используя Festival проект,
* MacOSX, используя SpeechSynthesis
Так как для Windows и Mac используются родныe API то все голосовые движки установленные в систему будут автоматически вам доступны. Для Unix всё не так радужно, нет какой-то общей системы, апи, поэтому был просто выбран проект Festival который даёт неплохое качество для английского языка и лицензию LGPL. На Mac вы всегда можете расчитывать на отличный голос Alex.
Использование библиотеки очень простое — итак ваше приложение наконец скажет «Hello World!».
Qt Software → Создание Qt+PySide гибридных приложений из песочницы
Возможно вы знаете про PySide, python биндинги к Qt. Также существует PyQt библиотека которая предоставляет аналогичную функциональность но к сожалению ограничена GPL или коммерческой версией. PySide распространяется под LGPL лицензией что даёт удобную возможность пользовать в коммерческих приложениях.
Python даёт возможность очень быстрого создания рабочих приложений и PySide как раз предоставляет такую возможность для Qt разработчиков. По моему опыту создание аналогичного функционала возможно в 1.5-2 раза быстрее чем на C++.
Часто возникает необходимость по быстрому присоединить C++ библиотеку (Qt-подобным интерфейсом) к PySide приложению, или же наоборот стоит задача использования Python скриптов в Qt(C++) приложениях. В обоих случаях нужна автоматическая поддержка API классов от Qt и возможность signal-slot соединений между Qt(C++) и Python(PySide) частями приложения. K сожалению данный вопрос практически не освещён и сделать всё и сразу рабочим довольно сложно.
Итак мы будем создавать гибридное приложение состоящее одновременно из C++ и Python частей и использующее Qt как основную GUI библиотеку.
Python даёт возможность очень быстрого создания рабочих приложений и PySide как раз предоставляет такую возможность для Qt разработчиков. По моему опыту создание аналогичного функционала возможно в 1.5-2 раза быстрее чем на C++.
Часто возникает необходимость по быстрому присоединить C++ библиотеку (Qt-подобным интерфейсом) к PySide приложению, или же наоборот стоит задача использования Python скриптов в Qt(C++) приложениях. В обоих случаях нужна автоматическая поддержка API классов от Qt и возможность signal-slot соединений между Qt(C++) и Python(PySide) частями приложения. K сожалению данный вопрос практически не освещён и сделать всё и сразу рабочим довольно сложно.
Итак мы будем создавать гибридное приложение состоящее одновременно из C++ и Python частей и использующее Qt как основную GUI библиотеку.
Qt Software → Qt: работа с Vkontakte API и Phonon из песочницы

Статья описывает взаимодействие Qt c такими программными интерфейсами как Vkontakte API и Phonon, в реальных примерах и подробным описанием.
В конце статьи ссылка на репозиторий с исходным кодом который Вы можите свободно скачать и запустить.
Персональные блоги → Reminder — Программа напоминаний событий, или жёлтый колобок в трее, сообщающий у кого сегодня день рождения
Есть старая фраза, родившаяся в мире Linux, звучащая примерно так «Если какого-то программного обеспечения нет под Linux, значит оно не нужно или его кто-то уже разрабатывает».
Если же была необходимость в каком-либо конкретном программном обеспечении и никто в данный момент не занимался его разработкой, то была другая, не менее популярная фраза: «Если ты не можешь найти в мире Linux именно то, что тебе надо, напиши это сам».
Таким образом и развивалось свободно распространяемое программное обеспечение, когда десятки и сотни тысяч программистов — энтузиастов со всего мира писали свои программы для своих нужд и делали их доступными для всех и каждого.
Именно поэтому Linux, как операционная система становится всё более и более популярной.
После достаточно долгих и тщетных поисков простой и лёгкой программы, которая висела бы себе в трее, рядом с погодой и часиками и напоминала тебе о предстоящих событиях, было принято решение написать такую программу самому.
Если же была необходимость в каком-либо конкретном программном обеспечении и никто в данный момент не занимался его разработкой, то была другая, не менее популярная фраза: «Если ты не можешь найти в мире Linux именно то, что тебе надо, напиши это сам».
Таким образом и развивалось свободно распространяемое программное обеспечение, когда десятки и сотни тысяч программистов — энтузиастов со всего мира писали свои программы для своих нужд и делали их доступными для всех и каждого.
Именно поэтому Linux, как операционная система становится всё более и более популярной.
После достаточно долгих и тщетных поисков простой и лёгкой программы, которая висела бы себе в трее, рядом с погодой и часиками и напоминала тебе о предстоящих событиях, было принято решение написать такую программу самому.
Qt Software → Приватные слоты в паттерне Pimpl от Qt
Вступление.
Недавно я писал по поводу реализации паттерна Pimpl в библиотеке Qt и призывал людей следовать такому подходу при разработке их собственных бибиотек. Теперь я хочу поговорить о таком понятии, как приватные слоты и тем самым продолжить эту тему. Заключительной статьей на эту тему будет реализация механизма Implicit Sharing и shared d-pointer.
Что это и зачем это нужно.
Приватные слоты — это механизм дополняющий функционал d-указателей. Он позволяет реализовать слоты для приватного класса, даже если он не является наследником от QObject (обычно он им и не является), но для этого публичный класс должен быть наследником от QObject. Тоесть по факту создается некий приватный слот в публичном классе и он непосредственно дергает нужный метод приватного класса.
Зачем это нужно? Ну рассмотрим на примере. Есть класс QAbstractScrollArea. Он просто отображает некий виджет (viewport) и обеспечивает прокрутку. Прокрутка обеспечивается с помощью двух экземпляров класса QScrollBar. Сами эти скролбары он хранит в приватном классе. Теперь проблемма: как подключить сигнал от скроллбара об изменение его позиции с классом QAbstractScrollAreaPrivate, ведь он не является QObject'ом? Сделать его наследником от QObject — лучше не делайте это :-). Можно сделать слот в публичном классе и повесить на него, то в таком случае это не очень красиво — так как наружу выходят слоты от внутренней реализации. Вот ту Qt-шниками был придуман достаточно разумный и элегантный подход — приватные слоты.