Традиционным способом начала разработки было выкачивание всех исходников и их компиляция, и даже из беглого сравнения размера инструкции для Windows и Ubuntu видно, что эта задача очень даже непростая. К счастью, появился способ проще и быстрее.
Для этого нам понадобится обычный Windows-инсталятор qutIM'а, QtSDK и cmake.
Тут никаких тонкостей, просто в лоб ставим себе desktop Qt (minGW) и устанавливаем cmake, единственный момент, что нужно в qtvars.cmd дописать в переменную PATH путь до cmake'а
Лучше всего ставить его не в Program Files, а в другую папку, например C:\develop\qutim\dist. Установщик содержит в себе все нужные заголовочные файлы и объектные файлы, необходимые для линковки, а в директории share/doc есть html документация, точнее даже её набросок, полной документации по API пока не существует.
Примерный вид CMakeLists.txt будет таким:
В директории src же нужно положить CMakeLists.txt с описанием собираемых плагинов
Создаваемый нами плагин будет линковаться с simplecontactlist.a, поэтому нужно указать cmake'у, что нам нужно найти её. Плагин представляет собой расширение, поэтому необходимо указать имя класса, которое будет использоваться как описание расширения и указать путь до заголовочного файла. В случае же, если мы вместо EXTENSION создаем SUBPLUGIN, необходимо будет создать самостоятельно класс, наследующийся от qutim_sdk_0_3::Plugin и экспортировать его через QUTIM_EXPORT_PLUGIN. Проще всего подсмотреть реализацию в других плагинах.
Писать мы будем плагин, который будет рисовать кнопки в заголовке нашего контактлиста. Хочу заметить, что simplecontactlist не является частью публичного API, поэтому его заголовочных файлов нету в инсталляторе, поэтому мы просто руками скопируем нужные нам файлы в include. Но нужно помнить, что API может в любой момент поменяться.
Для создания формы контактлиста нужно унаследоваться от интерфейса AbstractContactListWidget и реализовать методы AddButton, который будет добавлять кнопки в заголовок окна, RemoveButton, который будет их удалять. Помимо этого, нужно будет получить указатель на модель контактов и делегат для отрисовки, всё это можно посмотреть в архиве с исходниками или скачать через git из репы labs.
Для этого нам понадобится обычный 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).
В результате должна получиться вот такая красота.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/35f/80a/f7b/35f80af7b7aa9b59ca9f238e1208cf8b.png)
Что сейчас больше всего нужно:
- Антиспам
- Модель контактлиста без разделения на группы
- Интеграции с различными хранилками файлов (dropbox, etc)
- Проверка орфографии для Windows
- Модель контактлиста с разделением на протоколы (с написанием специального делегата)
- Now playing для windows
Все вопросы по API задавайте в нашу конференцию talks@conference.qutim.org.