How to create panel plugin (Rus) - Razor-qt/razor-qt GitHub Wiki
#How to по написанию плагинов для панели. ##Немного теории. Плагин для панели - это библиотека написаная на C++. Еще одна обязательная вещь - это desktop-файл описывающий этот плагин. Так же могут быть дополнительные файлы, вроде переводов. Сами плагины будут установлены в /usr/local/lib/razor-panel или /usr/lib/razor-panel (зависит от опции -DCMAKE_INSTALL_PREFIX у cmake). Desktop файлы устанавливаются в /usr/local/share/razor/razor-panel, переводы в /usr/local/share/razor/razor-panel/ИМЯ_ПЛАГИНА.
Для сборки Вам нужно дерево исходников, последнюю версию можно взять из GIT git clone git://github.com/Razor-qt/razor-qt.git или как архив отсюда. Исходники плагинов для панели находятся в поддиректории razorqt-panel.
Давайте напишем простейший плагин - helloworld. Создаем директорию razorqt-panel/plugin-helloworld. Cmake проект не может иметь два подпроекта с одинаковыми именами, а один подпроект helloworld уже есть, поэтому нам придется использовать жутковатое "panelhelloworld".
##CMake. Копируем CMakeLists.txt от плагина часов, и правим его:
cmake_minimum_required(VERSION 2.6)
set(PLUGIN "panelhelloworld")
set(HEADERS
    razorhelloworld.h
)
set(SOURCES
    razorhelloworld.cpp
)
set(MOCS
    razorhelloworld.h
)
set(UIS
)
#*******************************************
include ("../BuildPlugin.cmake")
BUILD_RAZOR_PLUGIN(${PLUGIN})
И добавим наш плагин в общую систему сборки. Для этого добавим несколько строк в razorqt-panel/CMakeLists.txt
...
# *******************************************************************
# What plugins will be built, by default.
# You can enable/disable building of the plugin using cmake options.
#    cmake -DCLOCK_PLUGIN=Yes .. # Enable clock plugin
#    cmake -DCLOCK_PLUGIN=No ..  # Disable clock plugin
...
setByDefault(HELLOWORLD_PLUGIN Yes)
# *******************************************************************
...
if (HELLOWORLD_PLUGIN)
    set(ENABLED_PLUGINS ${ENABLED_PLUGINS}   "HelloWorld")
    add_subdirectory(plugin-helloworld)
endif (HELLOWORLD_PLUGIN)
##Desktop файл. Чтоб отобразить список доступных плагинов, панели нужно знать какие вообще плагины установлены и как они называются. Для этого каждый плагин предоставляет .desktop-файл со своим описанием. Опять за основу возьмем файл от часов. Создаем поддиректорию razorqt-panel/plugin-helloworld/resources и копируем в нее desktop-файл под именем panelhelloworld.desktop, и приводим его к виду:
[Desktop Entry]
Type=Service
ServiceTypes=RazorPanel/Plugin
Name=Hell World
Comment=A "hello world" super plugin.
Name[ru]=Привет мир
Comment[ru]=Супер плагин "Привет Мир".
##Код. Наконец дошло дело до кода. Плагин - это класс наследник RazorPanelPlugin. Который в свою очередь наследник QWidget-а. Создаем 2 файла - razorhelloworld.h и razorhelloworld.cpp. Они не большие приведу их полностью.
razorqt-panel/plugin-helloworld/razorhelloworld.h
01 /* BEGIN_COMMON_COPYRIGHT_HEADER
02  * (c)LGPL2+
03  *
04  * Razor - a lightweight, Qt based, desktop toolset
05  * http://razor-qt.org
06  *
07  * Copyright: 2012 Razor team
08  * Authors:
09  *   Alexander Sokoloff <[email protected]>
10  *
11  * This program or library is free software; you can redistribute it
12  * and/or modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General
22  * Public License along with this library; if not, write to the
23  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24  * Boston, MA 02110-1301 USA
25  *
26  * END_COMMON_COPYRIGHT_HEADER */
27
28 #ifndef RAZORHELLOWORLD_H
29 #define RAZORHELLOWORLD_H
30
31 #include "../panel/razorpanelplugin.h"
32 #include <QtGui/QPushButton>
33
34 class RazorHelloWorld : public RazorPanelPlugin
35 {
36    Q_OBJECT
37 public:
38     RazorHelloWorld(const RazorPanelPluginStartInfo* startInfo, QWidget* parent = 0);
39     ~RazorHelloWorld();
40
41     virtual RazorPanelPlugin::Flags flags() const { return PreferRightAlignment; }
42
43 private slots:
44     void showMessage();
45 
46 private:
47     QPushButton mButton;
48 };
49
50 EXPORT_RAZOR_PANEL_PLUGIN_H
51
52 #endif // RAZORHELLOWORLD_H
razorqt-panel/plugin-helloworld/razorhelloworld.cpp
01 /* BEGIN_COMMON_COPYRIGHT_HEADER
02  * (c)LGPL2+
03  *
04  * Razor - a lightweight, Qt based, desktop toolset
05  * http://razor-qt.org
06  *
07  * Copyright: 2012 Razor team
08  * Authors:
09  *   Alexander Sokoloff <[email protected]>
10  *
11  * This program or library is free software; you can redistribute it
12  * and/or modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General
22  * Public License along with this library; if not, write to the
23  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24  * Boston, MA 02110-1301 USA
25  *
26  * END_COMMON_COPYRIGHT_HEADER */
27
28 #include "razorhelloworld.h"
29 #include <QtGui/QMessageBox>
30 
31 EXPORT_RAZOR_PANEL_PLUGIN_CPP(RazorHelloWorld)
32 
33 RazorHelloWorld::RazorHelloWorld(const RazorPanelPluginStartInfo* startInfo, QWidget* parent):
34     RazorPanelPlugin(startInfo, parent)
35 {
36     setObjectName("HelloWorld");
37 
38     mButton.setText(tr("HW"));
39     addWidget(&mButton);
40     connect(&mButton, SIGNAL(clicked()), this, SLOT(showMessage()));
41 }
42 RazorHelloWorld::~RazorHelloWorld()
43 {
44 }
45 void RazorHelloWorld::showMessage()
46 {
47     QMessageBox::information(0, tr("Panel"), tr("Hello, World!"));
48 }
Первые 26 строк - лицензия, предпочтительно использовать LGPL2+ как наиболее либеральную из GPL.
Строка 31 в H-файле - Подключаем заголовочный файл с RazorPanelPlugin.
Конструктор (стр. 32 в H и 33-34 в CPP) - вам не надо парится о параметрах, RazorPanelPlugin сам обработает параметры.
Обязательно задайте ObjectName для плагина (стр. 36 в CPP), оно используется в файле темы.
Интересна функция Flags (41 в H), она возваращает набор флагов для вашего плагина, сейчас есть всего 2 флага
- 
PreferRightAlignment - когда пользователь добавляет плагин на панель, он может добавится или слева или справа. Этот флаг учитывается только при добавлении плагина, в дальнейшем используются настройки пользователя. Скорее всего, Вам надо выставить его. 
- 
HaveConfigDialog - плагин имеет диалог настроек, у нас его нет. 
##Сборка В корне дерева создаем директорию для сборки. Переходим в нее и запускаем cmake.
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
Запускаем сборку и установку:
$ make && sudo make install
Проверить можно запустив новую панель и указав отдельный конфиг (панель автоматически создаст его):
$ razor-panel testplugin
Панель будет пустой и тонкой, не проглядите ее. Добавьте новый плагин через меню и наслаждайтесь :)
Полезная статья о том как создавать "Pull request'ы на GitHub"