Pull to refresh

Разработка плагинов к qutIM'у из под Windows — быстрый старт

Reading time4 min
Views1.2K
Традиционным способом начала разработки было выкачивание всех исходников и их компиляция, и даже из беглого сравнения размера инструкции для Windows и Ubuntu видно, что эта задача очень даже непростая. К счастью, появился способ проще и быстрее.

Для этого нам понадобится обычный Windows-инсталятор qutIM'а, QtSDK и cmake.
Шаг первый — установка QtSDK и cmake


Тут никаких тонкостей, просто в лоб ставим себе desktop Qt (minGW) и устанавливаем cmake, единственный момент, что нужно в qtvars.cmd дописать в переменную PATH путь до cmake'а

Шаг второй — установка qutIM


Лучше всего ставить его не в Program Files, а в другую папку, например C:\develop\qutim\dist. Установщик содержит в себе все нужные заголовочные файлы и объектные файлы, необходимые для линковки, а в директории share/doc есть html документация, точнее даже её набросок, полной документации по API пока не существует.

Шаг третий — создание CMakeLists.txt для нашего плагина


Примерный вид CMakeLists.txt будет таким:

cmake_minimum_required (VERSION 2.6 FATAL_ERROR)
if( COMMAND cmake_policy )
cmake_policy( SET CMP0003 NEW )
endif(COMMAND cmake_policy )
project( Plugins )
set(QT_MIN_VERSION "4.6.0")

set(QUTIM_PATH "" CACHE FILEPATH "Path to qutim distro")
set(CMAKE_INSTALL_PREFIX ${QUTIM_PATH})

LIST (APPEND CMAKE_MODULE_PATH "cmake")
LIST (APPEND CMAKE_MODULE_PATH "${QUTIM_PATH}/share/cmake/Modules")
LIST (APPEND CMAKE_PREFIX_PATH "${QUTIM_PATH}")

INCLUDE (MacroEnsureVersion)
find_package(Qt4 COMPONENTS QtCore QtGui)
find_package(QutIM REQUIRED)

include_directories(include)
add_subdirectory(src)


В директории src же нужно положить CMakeLists.txt с описанием собираемых плагинов
find_library( SIMPLECONTACTLIST_LIBRARIES simplecontactlist PATHS ${QUTIM_PATH}/lib )
message (${SIMPLECONTACTLIST_LIBRARIES})

qutim_add_plugin(simplecontactlistwidget
EXTENSION
EXTENSION_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/sevenwidget.h
EXTENSION_CLASS Core::SimpleContactList::SimpleWidget
DISPLAY_NAME "Seven"
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
DESCRIPTION "Windows seven specific implementation with button's in caption"
LINK_LIBRARIES ${SIMPLECONTACTLIST_LIBRARIES}
)


Создаваемый нами плагин будет линковаться с simplecontactlist.a, поэтому нужно указать cmake'у, что нам нужно найти её. Плагин представляет собой расширение, поэтому необходимо указать имя класса, которое будет использоваться как описание расширения и указать путь до заголовочного файла. В случае же, если мы вместо EXTENSION создаем SUBPLUGIN, необходимо будет создать самостоятельно класс, наследующийся от qutim_sdk_0_3::Plugin и экспортировать его через QUTIM_EXPORT_PLUGIN. Проще всего подсмотреть реализацию в других плагинах.

Шаг четвертый — написание плагина


Писать мы будем плагин, который будет рисовать кнопки в заголовке нашего контактлиста. Хочу заметить, что simplecontactlist не является частью публичного API, поэтому его заголовочных файлов нету в инсталляторе, поэтому мы просто руками скопируем нужные нам файлы в include. Но нужно помнить, что API может в любой момент поменяться.

Для создания формы контактлиста нужно унаследоваться от интерфейса AbstractContactListWidget и реализовать методы AddButton, который будет добавлять кнопки в заголовок окна, RemoveButton, который будет их удалять. Помимо этого, нужно будет получить указатель на модель контактов и делегат для отрисовки, всё это можно посмотреть в архиве с исходниками или скачать через git из репы labs.
  m_model = ServiceManager::getByName<AbstractContactModel*>("ContactModel");
  Q_ASSERT(m_model);
  m_view = new TreeView(m_model, this);
  layout->addWidget(m_view);
  m_view->setItemDelegate(ServiceManager::getByName<QAbstractItemDelegate*>("ContactDelegate"));


* This source code was highlighted with Source Code Highlighter.



Шаг пятый — сборка


Создаем по соседству с каталогом, содержащим в себе самый первый CMakeLists.txt каталог build, запускаем Qt command prompt, переходим в него и командуем примерно следующее:

H:\develop\windows\labs\build>cmake ..\sevenlist -DCMAKE_BUILD_TYPE=Release -DQUTIM_PATH=H:\develop\qutim\dist -G"MinGW Makefiles"


В результате должно получиться примерно вот это:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: H:/apps/QtCreator/mingw/bin/gcc.exe
-- Check for working C compiler: H:/apps/QtCreator/mingw/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: H:/apps/QtCreator/mingw/bin/g++.exe
-- Check for working CXX compiler: H:/apps/QtCreator/mingw/bin/g++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - not found.
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - found
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found.
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found.
-- Found Qt-Version 4.7.2 (using H:/apps/Qt/4.7.2/bin/qmake.exe)
-- Found QutIM: H:/develop/qutim/dist/lib/liblibqutim.dll.a
H:/develop/qutim/dist/lib/libsimplecontactlist.dll.a
-- Configuring done
-- Generating done
-- Build files have been written to: H:/develop/windows/labs/build


Теперь же мы можем просто скомандовать make install и запустить qutIM. Только не пытайтесь выполнять эту команду при запущенном кутиме. Исходники плагина можно взять на гиториусе(папка sevenlists).

В результате должна получиться вот такая красота.



Что сейчас больше всего нужно:
  • Антиспам
  • Модель контактлиста без разделения на группы
  • Интеграции с различными хранилками файлов (dropbox, etc)
  • Проверка орфографии для Windows
  • Модель контактлиста с разделением на протоколы (с написанием специального делегата)
  • Now playing для windows


Все вопросы по API задавайте в нашу конференцию talks@conference.qutim.org.
Tags:
Hubs:
Total votes 34: ↑27 and ↓7+20
Comments17

Articles