войти зарегистрироваться

Информационная безопасностьDLL HiJacking в Qt-приложениях

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

Мной были проверены:


И они оказались уязвимы.


Видео демонстрация уязвимости (видео без звука):

Qt SoftwareТрюки с моделями в Qt из песочницы

Всем привет!
В этой небольшой статье я научу вас, одному интересному трюку с моделями, который можно реализовать с помощью 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 SoftwareQt приложения в 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



Продолжение под катом (много картинок).

Qt SoftwareQtSpeech, доступ к text-to-speech

Хочу представить небольшой но удобный модуль для кросс-платформенного использования TTS(text-to-speech). На данный момент поддерживаются основные платформы:
* 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 библиотеку.

Qt SoftwareQt: работа с Vkontakte API и Phonon из песочницы

Qt
Статья описывает взаимодействие Qt c такими программными интерфейсами как Vkontakte API и Phonon, в реальных примерах и подробным описанием.
В конце статьи ссылка на репозиторий с исходным кодом который Вы можите свободно скачать и запустить.

Персональные блоги Reminder — Программа напоминаний событий, или жёлтый колобок в трее, сообщающий у кого сегодня день рождения

Есть старая фраза, родившаяся в мире 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-шниками был придуман достаточно разумный и элегантный подход — приватные слоты.