Обновить
-0.53

Qt *

Кроссплатформенный инструментарий разработки ПО

Сначала показывать
Порог рейтинга
Уровень сложности

Приватные слоты в паттерне Pimpl от Qt

Время на прочтение10 мин
Охват и читатели8.1K

Вступление.


Недавно я писал по поводу реализации паттерна Pimpl в библиотеке Qt и призывал людей следовать такому подходу при разработке их собственных бибиотек. Теперь я хочу поговорить о таком понятии, как приватные слоты и тем самым продолжить эту тему. Заключительной статьей на эту тему будет реализация механизма Implicit Sharing и shared d-pointer.

Что это и зачем это нужно.


Приватные слоты — это механизм дополняющий функционал d-указателей. Он позволяет реализовать слоты для приватного класса, даже если он не является наследником от QObject (обычно он им и не является), но для этого публичный класс должен быть наследником от QObject. Тоесть по факту создается некий приватный слот в публичном классе и он непосредственно дергает нужный метод приватного класса.
Зачем это нужно? Ну рассмотрим на примере. Есть класс QAbstractScrollArea. Он просто отображает некий виджет (viewport) и обеспечивает прокрутку. Прокрутка обеспечивается с помощью двух экземпляров класса QScrollBar. Сами эти скролбары он хранит в приватном классе. Теперь проблемма: как подключить сигнал от скроллбара об изменение его позиции с классом QAbstractScrollAreaPrivate, ведь он не является QObject'ом? Сделать его наследником от QObject — лучше не делайте это :-). Можно сделать слот в публичном классе и повесить на него, то в таком случае это не очень красиво — так как наружу выходят слоты от внутренней реализации. Вот ту Qt-шниками был придуман достаточно разумный и элегантный подход — приватные слоты.

Читать дальше →

Что такое Pimpl по версии Qt, и с чем его едят!

Время на прочтение12 мин
Охват и читатели41K

Вступление.



Часто в документации от Qt встречается термин Pimpl. Кроме того, те кто хоть немного копался в исходном коде Qt часто видел такие макросы как: Q_DECLARE_PRIVATE, Q_D. А также встречал так называемые приватные заголовочные файлы, название которых заканчивается на "_p.h".
В этой статье я попробую приоткрыть ширму за всей это структурой.

Pimpl, что это?


Pimpl — Pointer to private implementation. Это одно из названий паттерна программирования. Еще его называют чеширским котом — «Cheshire Cat» (это название мне больше нравится). В чем суть этого паттерна? Основная идея этого паттерна — это вынести все приватные члены класса и, в не которых случаях, функционала в приватный класс.
Отсюда название «чеширский кот» — видно только улыбку, а все остальное остается невидимым, но оно несомненно есть :-) Кто не помнит этого замечательного кота, может обратится к первоисточнику, к книге Льюиса Кэрролла «Алиса в стране чудес». Очень интересная книга, особенно если читать в оригинале.
Что это дает?
Читать дальше →

QML — новый подход к построению GUI

Время на прочтение3 мин
Охват и читатели12K
Традиционно все десктопные приложения пишутся на императивных языках программирования, этот подход прост и понятен, куда проще описать последовательность действий для решения той или иной задачи, нежели поставить задачу в понятной для машины форме, но когда речь заходит о проектировании внешнего вида и поведения, возникают сложности.
Веб дизайнеры же привыкли описывать, как должно выглядеть веб приложение, то есть ставить задачу, а не по пунктам описывать её решение, такой подход называется декларативным, он удобен, но к сожалению в традиционных приложениях до сих пор господствует именно императивный подход. Есть конечно дизайнеры форм, но они лишь позволяют в общих чертах обрисовать внешний вид приложения, но совершенно не способны описать его поведение. Для решения это проблемы в Qt Software был предложен новый проект Declarative User Interface и в рамках него новый язык разметки:

Встречаем QML


Это новый язык разметки, позволяющий описывать не только внешний вид, но и поведение ваших приложений. Он очень прост и обладает json образным синтаксисом, немного сближающим его html5, что думаю очень придется по душе веб-дизайнерам, да и программистам тоже. А в перспективе это наконец позволит полностью разделить внутреннюю логику работы приложения и его внешнее поведение, в результате чего будет наконец решена извечная проблема, когда программист занимается ещё и внешним видом приложения, потому, как дизайнерам слишком сложно было вникнуть в программирование.
Хотите прикоснуться?

Готовим плагин для qutIM на дому

Время на прочтение6 мин
Охват и читатели916
Cегодня мы будем заниматься приготовлением плагина для qutIM'а, но не для того, который совсем недавно зарелизился, а для будущего, активная разработка которого сейчас идёт.
Для начала хотел бы сказать немного общих слов:
  1. В sdk03 мы постарались учесть все «ошибки бурной молодости»
  2. Оно полностью несовместимо со старым skd02
  3. Скорее всего, больше таких резких переходов в API между версиями не будет

И именно поэтому я рекомендую всем, кто ещё ни разу не писал плагины для Кутима, ориентироваться на sdk03
Хочу отметить немаловажный факт, что сейчас разработка ведется с использованием Qt 4.6, она предоставляет огромные дополнительные возможности, от которых просто грех отказываться.
Если вы горите желанием реализовать что-то интересное, но не знаете куда направить свою энергию, то эта статья для вас!
Поехали

Qt + Kinetic = Eye-candy за полчаса

Время на прочтение5 мин
Охват и читатели3.2K
В процессе разработки новой версии QutIMа возникла потребность переписать систему уведомлений, так как старая имела множество недостатков.

Не слишком давно на Хабре появился топик, посвящённый новым возможностям, которые появились в Qt. В частности, в нём описывается новый фреймворк, призванный облегчить создание анимированного пользовательского интерфейса. Если дорогой читатель ещё не в курсе дела, то советую для начала ознакомиться с данной статьей.

Небольшое видео с демонстрацией возможностей:



неплохо, правда?

Создание смазывания фона под окном в Windows

Время на прочтение2 мин
Охват и читатели4.1K
Буквально вчера в блогах разработчиков Qt был опубликован топик, в котором описывалось как можно создать эффект размытия фона под окном приложения в Windows Vista и Windows 7.

Под катом его перевод

Разработка собственной Файловой модели (вместо QDirModel и QFileSystemModel)

Время на прочтение8 мин
Охват и читатели9.3K
В этой статье я расскажу о создании собственной файл модели в Qt. Сразу скажу что модель создавалась под конкретную задачу и не планировалось для широкого использования, так что в ней может и не быть того что вам хочется. Еще хочется добавить что опыт программирования на С++/Qt у меня не столь велик, поэтому вполне готов к комментариям типа: «Ваш код г%вно».

Теперь о том, а зачем собственно...


Известно что в Qt 4 есть две встроенных модели работы с файлами:
QDirModel и
QFileSystemModel.

Однако, эти модели очень медленно работают с большим количеством файлов.
QDirModel так вообще безобразно, у второй дела получше, но даже если сравнивать с виндовым проводником, то все равно отвратительно. Как показало исследование профайлером, при каждом запросе к содержимому папки идет очень долгое ожидание мутекса.

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

Пробуем Qt 4.6: Qt Animations и State Machine

Время на прочтение8 мин
Охват и читатели14K
image
На днях вышло так называемое «технологическое превью» (technological preview) Qt 4.6, которое позволяет уже сейчас попробовать новые фичи, которые войдут в релиз 4.6 этого замечательного фреймворка. Перечислять новшества я не буду — они были достаточно хорошо освещены в этом топике, а подробнее остановлюсь на двух из них: State Machine и Qt Animation Framevork.

Итак, что же они из себя представляют?
Я хочу прочитать длинный пост и посмотреть 4 коротеньких видео

Анонс Qt 4.6

Время на прочтение2 мин
Охват и читатели1.4K
9 сентября этого года наша любимая компания, разрабатывающая один из лучших инструментариев для создания графических приложений, представила на публику анонс новой версии: 4.6. Что нового? А вот что:
Подробнее

Смешать и слегка взболтать: Qt, Carbon и Cocoa

Время на прочтение6 мин
Охват и читатели2.7K
Qt можно считать наиболее распространенной кроссплатформенной библиотекой для разработки пользовательских интерфейсов. Carbon (С++) и Cocoa (Objective-C), в свою очередь, являются основными фреймворками, используемыми Apple, что означает гармоничный внешний вид и наилучшую интеграцию с системой при их использовании. Несмотря на попытки создания свободных клонов, в полном объеме они реализованы только в MacOS.

Уверен, что вопросом связи Qt и Cocoa задавались многие, но в условиях отсутствия внятной информации в интернете вряд-ли достигли значимых успехов.
мои результаты

Использование Direct3D совместно с Qt

Время на прочтение7 мин
Охват и читатели7.8K
Однажды, у меня появилась необходимость использования Direct3D совместно с Qt. После нескольких дней поисков в интернете, я нашел всего лишь какие-то обрывки информации. Полноценного описания механизма использования Direct3D не было нигде. В результате, после долгих изысканий я добился того, чего хотел:)
Под катом находится инструкция «сближения“ Direct3D и Qt, а так же код виджета, который можно использовать as is
Читать дальше →

Ускорение сборки Qt компилятором Visual C++

Время на прочтение1 мин
Охват и читатели6.6K
Qt под Visual C++ собирается с помощью nmake. nmake — инструмент старый, давно не развивающийся. В то время, как пользователи GNU инструментария получали полную отдачу от новых двух- и четырехядерных процессоров, распараллеливая сборку с помощью make -j, пользователи Visual C++ собирали Qt в один «поток».

Но разработчики Qt не забыли о пользователях Visual C++ и выпустили для них утилиту jom (исходники, бинарник). jom определяет количество ядер в системе и распараллеливает сборку.

Пользоваться утилитой предельно просто — нужно положить её в директорию из PATH и запускать вместо nmake.

Happy building!

Организация автоматизированного тестирования GUI

Время на прочтение5 мин
Охват и читатели16K
При разработке мы стараемся покрывать наш код не только матом, но и unit тестами. Однако все покрыть тестами не всегда получается. К тому же, остается GUI, для которого написание тестов довольно трудоемкая работа. При всех этих проблемах неизменным остается требование, что каждый следующий камит в репозиторий не должен портить уже существующий функционал.

В этой статье я хочу рассказать какой инструментарий мы используем для тестирования наших desktop приложений, написанных на Qt.

Пол года назад в ходе исследования инструментов для тестирования GUI в поле моего зрения попал продукт Squish компании froglogic. Из плюсов данного решения можно отметить следующие:

  • тесная дружба Squish c классами Qt (в том числе и itemы в QGraphiscScene);
  • кроссплатформенность;
  • поддержка скриптовых языков (JavaScript, Python);
  • автоматизированная генерация текста теста;
  • удобная система запуска тестов из консоли.

Читать дальше

Ближайшие события

Qt 4.5 и Qt Creator 1.0 теперь с нами!

Время на прочтение1 мин
Охват и читатели2.5K
Очередная версия библиотеки Qt теперь может радовать каждого. Этот релиз принес разработчикам важный и неожиданный сюрприз: Qt распространяется на LGPL. А также есть и другие приятные подарочки от Qt Software:
  • Значительно увеличилась скорость работы графической подсистемы
  • Улучшена интеграция с WebKit
  • Также Qt был портирован на фреймворк Cocoa от Apple.

Подробный список на официальном сайте

Qt Creator


Qt Creator — это легковесная кросс-платформенная среда разработки, заточенная для разработки под C++ и Qt. Разработка Qt Creator велась с прицелом на две вещи: полностью кросс-платформенная разработка; и простота использования для тех, кто только начинает знакомиться с Qt.

Среда Qt Creator включает эффективный набор средств для создания и тестирования программ на Qt:
  • Продвинутый редактор кода на языке C++
  • Контекстная помощь
  • Визуальный отладчик
  • Управление исходным кодом
  • Средства управления проектом и сборкой

Qt Creator также распространяется под лицензией LGPL 2.1. На данный момент для разработки поддерживаются только десктопные операционные системы (Windows, Linux и Mac OS), но поддержка платформ для встраиваемых устройств возможно будет добавлена в следующие несколько месяцев.

Всех разработчиков на Qt поздравляю с этим знаменательным событием!

rWin 0.5 beta — клиент для rTorrent на Qt

Время на прочтение2 мин
Охват и читатели2.7K
Многим известен торрент клиент для Unix систем rTorrent. Его достоинством и недостатком является консольный интерфейс, но есть множество способов борьбы с ним, начиная от web интерфейсов (wTorrent), заканчивая frontend-ом написанным на Java (nTorrent). Лично сам пользуюсь web интерфейсом + screen в консоли. Все бы хорошо, НО за время использования (а это уже примерно как год) постоянно было неудобство со слежением за загрузками и регулировкой скорости закачки. Поэтому решил сделать небольшой клиент, который бы висел в трее, показывал скорость загрузки и другую полезную информацию.
Читать дальше →

Google Translator

Время на прочтение1 мин
Охват и читатели2.2K
Недавно я писал о классе, который реализовывает перевод текстов через Google Translator.
Несколько времени поразмыслив я решил пойти дальше. Зачем людям какой-то класс? Они хотят видить как все работает.
Именно поэтому я написал маленький open-source проект.
image
Читать дальше →

Google Translate Non Ajax API

Время на прочтение1 мин
Охват и читатели1.8K
Все знают сервис Google Translate. Он переводит достаточно неплохо, ну, по крайней мере, так что понять можно.
Так не было ли ни у кого желания использовать возможности переводчика Гугл в своих целях?
Читать дальше →

Работа с базами данных в Qt в многопоточном окружении

Время на прочтение9 мин
Охват и читатели21K
Все кто разрабатывают приложения на Qt, рано или поздно сталкиваются с работой с БД в многопоточном окружении. И если невнимательно читать Ассистант, то можно натолкнуться на одни очень интересные грабли.
А в чем грабли?

Локализация и числительные

Время на прочтение2 мин
Охват и читатели3.5K
На Хабре полно статей, с примерами на разных языках, о том, как правильно обрабатывать числительные и склонять при этом существительные, к ним относящиеся. Посмотрим, как эта задача
решается в Qt

Работа с базами данных в Qt

Время на прочтение6 мин
Охват и читатели222K
Qt дает возможность создания платформо-независимых приложений для работы с базами данных, используя стандартные СУБД. Qt включает «родные» драйвера для Oracle, Microsoft SQL Server, Sybase Adaptive Server, IBM DB2, PostgreSQL, MySQL и ODBC-совместимых баз данных. Qt включает специфичные для баз данных виджеты, а также поддерживает расширение для работы с базами данных любых встроенных или отдельно написанных виджетов.
Читать дальше →

Вклад авторов