2010-12-14

QtCreator: создание расширения редакторов на примере QmlJSEditor

Возникла потребность в активном использовании extension'ов к QtScript, причем в js-виде. Как известно, они хранятся в файлах __init__.js, раскиданных по разным папкам внутри папки qtscriptextension. Поменять название файла, содержащего extension, возможности нет (оно зашито в исходниках Qt). Следовательно, в QtCreator мы видим кучу файлов с одинаковым названием (__init__.js), что не очень удобно и совсем не продуктивно. В качестве решения был реализован небольшой плагин, являющийся по сути надстройкой над QmlJSEditor. На его примере и будет рассказано как отнаследоваться от QmlJSEditor, чтобы не потерять имеющийся функционал.

2010-11-07

QtCreator-XmlTree: Применение цветовых схем к редактору

QtCreator поддерживает кастомизацию цвета и шрифта текста в редакторах (в самом QtCreator это называется Color scheme). Это удобно, клево и все такое. Рассмотрим как добавить эту функциональность к нашему редактору XML.

QtCreator-XmlTree: обработка сохранения в TextEditor

Несомненно, использование готовой инфраструктуры TextEditor дает нам немало плюшек. Но, есть небольшая проблемка. Редактор TextEditor'а у нас является только одной из вкладок, на второй вкладке расположено дерево и вкладки синхронизируются только при переключении между ними. Стандартная функция сохранения в TextEditor'е сохраняет содержимое именно текстового редактора. Следовательно при внесении изменений в дерево и сохранении без переключения в текстовый редактор мы теряем эти изменения. Исправим это досадное недоразумение.

2010-11-01

Сборка Qt-приложений под Symbian: Tips&Tricks

Потребовалось мне тут собрать наш проект под Symbian. Как раз появилась дев-версия 4.7.0 и появилась возможность протестировать на n8. Проект не то чтобы очень большой и замудренный, но в итоге сборка его заняла немало времени. В этой статье собраны все грабли, на которые я наступил.

2010-10-14

Qt DevDays 2010: Среда

Третий день Qt DevDays у меня начался не с самого начала. Семнар про лицензирование я слегка проспал, а на первом раунде технических сессий меня особо ничего не заинтересовало. Поэтому, неспешно подкрепившись, я появился уже на втором раунде сессий.

2010-10-12

Qt DevDays 2010: Прибытие

Сегодня я таки долетел до Мюнхена (не сказать что это было легко, пересадка в Варшаве без возможности покурить дает о себе знать) и вот я на Qt DevDays. Первым делом регистрация в отеле, потом регистрация на самом евенте и у меня на руках пакет участника, доп. плюшка как сертифицированному разработчику на Qt и вопрос "что делать дальше?".
Эта статья кроме описания первого дня также послужит оглавлением остальным статьям:
  1. Вторник (12.10.2010)
  2. Среда (13.10.2010)

2010-10-03

QtCreator-XmlTree: Добавляем редактор исходников

Редактор xml'я в виде дерева это безусловно удобно, но иногда возникает необходимость подправить его в текстовом виде. Самый логичный вариант добавить в интерфейс две вкладки: дерево и текстовый редактор.

2010-09-28

Flickable и touch-интерфейсы: избавляемся от нежелательного скролла

При работе с Flickable (а если конкретнее, то с ListView) наткнулся на то, что при не очень аккуратном нажатии пальцем на элемент происходит не нажатие, а небольшой скролл. Это портит User eXperience достаточно сильно, так как приходится очень точно целиться в элементы. К сожалению, в Assistant не указано что можно с этим делать, но небольшое курение исходников выявило, что надо просто увеличить значение свойства QApplication::startDragDistance и все сразу же станет как надо. Конечное значение подбирается исходя из размеров экрана (например на  HTC Hero это 25 пикселей).

QtCreator-XmlTree: Редактор

Итак, мы создали скелет проекта и теперь нам надо его наполнить. Для начала определимся что нам необходимо отнаследовать для создания своего редактора:
  • Core::IEditor
  • Core::IFile
  • Core::IEditorFactory
Ну и плюс к этому необходимо дописать уже созданного наследника ExtensionSystem::IPlugin и реализовать само дерево для отображения xml.

2010-09-26

QtCreator-XmlTree: Введение

Creator предоставляет достаточно мощную систему плагинов, но к сожалению по ней очень мало информации. Приходится искать все по обрывкам информации в сети и из исходников самого Креатора. Эта статья будет посвящена тому, что надо сделать для разработки своих плагинов. Остальные статьи цикла можно посмотреть в посте-оглавлении по XmlTree.

Плагин XmlTree для QtCreator

Qt Creator на данный момент является достаточно удобным и быстро развивающимся IDE, но в плане поддержки xml есть только возможность подсветить его GenericHighlighter'ом. По этой причине было решено написать плагин, показывающий и позволяющий редактировать xml в виде дерева нод. Этот пост является своеобразным оглавлением всех последующих постов, связанных с разработкой этого плагина.

  1. Введение
  2. Создание своего редактора
  3. Добавляем редактор исходников xml
  4. Корректно обрабатываем сохранение
  5. Используем цветовые схема из настроек QtCreator
  6. ............

Сам плагин хранится на Gitorious.

2010-09-17

Qt DevDays 2010

Меньше месяца осталось до DevDays. Сегодня были опубликованы официальные блогбаннеры мероприятия (брать отсюда). Пользуясь случаем размещу один у себя :)


2010-08-26

QtScript: небольшая заметка о маленьких биндингах

Иногда возникают ситуации, когда надо иметь доступ из QtScript'а к уже созданным C++-объектам и их методам, но не хочется ни писать громоздкие биндинги, ни менять сигнатуры методов, преобразуя их у QObject'у. К примеру, у нас есть фабрика, которая возвращает уже созданные объекты, но менять возвращаемые типы на QObject не хочется.

2010-07-23

Использование Tree Model в QML интерфейсах

На данный момент в QML мы можем описать только линейные модели и представления. Также есть вариант использовать VisualDataModel для построения псевдо-деревьев (с изменением текущего rootIndex).
Но иногда не нужно строить большие деревья, где оправдано изменение rootIndex модели, а нужно построить дерево с небольшим ветвлением и с возможностью отображения его целиком.
Ниже описан способ как это сделать.

2010-07-20

Qt Essentials Exam


В прошедшую пятницу, 16 июля 2010 года, я ездил сдавать экзамен Qt Essentials. На данный момент это единственная доступная сертификация по Qt. Теперь я Nokia Certified Qt Developer.
Сразу говорю, примеров вопросов здесь не будет совсем, так как по этому поводу каждый экзаменуемый подписывает NDA. Все остальное постараюсь осветить максимально подробно.

2010-06-23

Android-lighthouse: вызов Java-методов из C++/Qt-кода

По адресу http://qt.gitorious.org/~taipan/qt/android-lighthouse лежит репозитарий с Qt для Android'а. Проект более менее активно пилится его создателем и на данный момент его вполне уже можно использовать. Однако, там не хватает такой вещи как вызов Java-методов из кода, написанного на C++/Qt. В частности, это очень нужно для работы с GPS. Но. Никто не мешает нам слегка поправить проект и впилить туда нужный нам функционал. Этим и займемся.
Внимание! Все исходники основаны на версии репозитария на момент 23 июня (последний push на текущий момент сделан 14 июня).

Краткий экскурс: JNI
JNI - это коннектор между нативным кодом и кодом на Java. В настоящее время проект заброшен и не поддерживается, несмотря на большое количество багов в нем. Тем не менее, этот коннектор позволяет без проблем обращаться к ява-машине из нативного кода, пусть и делать это приходится очень аккуратно.

Постановка задачи
Работа с андроидом накладывает несколько ограничений:
  1. Мы не можем создать еще одну ява-машину, нам надо работать в той же (на процесс разрешена только одна ява-машина)
  2. ClassLoader для ява-машины в андроиде кастомизирован и не позволяет искать свои классы (системные ищутся и находятся на ура) из любого места отличного от функции OnLoad(). 
Первое ограничение нас, в принципе, особо не интересует, так как нам все равно нужны инстанции тех же объектов, которые были в нашем Java-приложении, а значит нужна именно та ява-машина.
Второе ограничение похуже и по сути не дает нам просто найти интересующие нас классы из нашего Qt-приложения и работать с ними. Опять же, делать поиск в OnLoad() и позже использовать найденные классы не получится, так как OnLoad() находится в lighthouse и кастомизировать его под каждое приложение не очень хорошо.
Следовательно, нам нужно:
  1. Найти общее решение для вызова своих Java-методов
  2. Реализовать его 

Qt в Ovi Store и кучка релизов

Итак, сегодня переломный день. С сегодняшнего дня разрешено выкладывать в Ovi Store приложения на основе Qt. Но обо всем по порядку.

Qt Creator 2.0
Вышел новый релиз IDE для Qt. К сожалению, в нем отключен Declarative (из-за задержки с Qt 4.7), но это позволило пользователям 4.6 насладиться фунционалом, добавленным после 1.3. А это такие вещи, как улучшенный рефакторинг, измененные настройки, улучшенный парсер pro-файлов и прочее. Всего между 1.3 и 2.0 было около 5000 коммитов. Сам я правда ожидаю появления в git снепшотов 2.1 (обещали к концу этой недели), в котором вернут обратно поддержку Declarative. Сам Creator 2.1 выйдет вместе с Qt 4.7.

Nokia Qt SDK 1.0
Также вышла первая релизная версия SDK для разработок под мобильные платформы Symbian и Maemo. Вышли в релиз версии для Windows и Linux, а для Mac OS X 10.6 пока что есть только бета-версия.
В релиз вошли:
  • Qt Creator 2.0
  • Qt Simulator 1.0
  • Qt Mobility
  • текущая версия MADDE
  • пакеты для Symbian
  • Smartinstaller для Symbian
  • экспериментальная версия Remotecompiler
  • документация ко всем компонентам

Qt Mobility 1.0.1
В довесок еще вышел небольшой релиз Mobility, который добавляет QtMultimediaKit.

Выход Qt на Ovi Store
И самая главная новость дня. В Ovi Store теперь можно заливать приложения, использующие Qt (пока что для N900, X6, N97 mini, но в дальнейшем список будет расширяться). Кроме того, теперь для регистрации в Ovi не надо быть частью какой-то организации, регистрация разрешена частным лицам. Ну и видимо чтобы добить тех, кто еще не упал в обморок от того что написано выше Nokia запустила бета-режим подписывания приложений для Symbian, который мало того что сокращает станадртный период подписывания вдвое, так еще и делает подпись бесплатной.

2010-06-11

Qt DeveloperNetwork - объединяем все

Некоторое время назад (а если быть точнее, то 21 мая) я получил доступ на закрытое бета-тестирование сайта http://developer.qt.nokia.com.

Что это?
Этот сайт по сути является попыткой объединить все, что нужно разработчику на Qt. Здесь и форум, и вики, и ссылки на саму библиотеку и дополнения к ней. На данный момент все находится в начальной стадии и многое еще не добавлено или добавлено, но с ошибками :)

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

А зачем это нужно, если есть QtCentre, ProgOrgRu, другие сайты на данную тематику?
И ведь действительно зачем? Сейчас есть большое количество различных форумов, блогов и просто сайтов, посвященных разработке на Qt, использованию Qt и просто Qt. Есть даже раздел на Форумах Nokia. 
По сути это не просто очередной сайт о Qt. Это попытка сделать единую стартовую точку для поиска информации и общения с другими разработчиками на Qt. Некое место, куда можно будет зайти и начать путь в поисках какого-то недостающего кусочка паззла вашего кода. 
Также этот сайт на текущий момент не является чем-то застывшим по функционалу, он активно развивается и учитываются пожелания бета-тестеров. То есть, со временем это будет действительно местом, с которого начинается день каждого qt-разработчика. 
Ну и сейчас это место, где активно сидят тролли (не те, которые на луркморье, а бывшие Trolltech). Кроме пожеланий по самому сайту они видят и вопросы и фичреквесты по самой библиотеке и инфраструктуре (например сегодня был поднят вопрос о документации).

А как туда попасть?
Бета-тестирование закрытое, но оставить заявку может любой желающий. Для этого достаточно пройти по ссылке http://qt.nokia.com/qtdn-signup и отметиться там. Со временем, возможно придет инвайт (или просто снимут статус бета-тестирования).

UPD (2010-07-08). Open beta
С 8 июля регистрация открыта для всех желающих.

О чем этот блог

Итак, это первое сообщение в этом блоге. Здесь я немного расскажу о том что в нем будет и о себе.

О блоге
Посты будут в основном о разработке с использованием C++/Qt. Иногда просто о Qt, иногда просто о C++, иногда вообще не о разработке, а просто об интересных вещах в мире Qt и около него. Посты будут нерегулярные и скорее всего редкие.
Время блога московское, язык постов русский (хотя со временем может появятся и на английском).

Обо мне
Разработчик на C++/Qt, также умею веб на php и java/gwt. В качестве платформы предпочитаю использовать Linux, но в разработке в основном кросс-платформенные проекты.