Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Применение панели режимов QtCreator 2 плагина

Anna | 24.06.2014 | нет комментариев
В продолжение заметок по разработке плагинов для QtCreator в данной статье описывается метод размещения виджетов непринужденно в панели переключения режимов. При разрешении экрана 1920×1080 в ней остается over 373×70 пикселей свободного пространства, которое дозволено с пользой задействовать в своем плагине. В качестве примеров реализации приводится 2 новых плагина для QtCreator. Изложения плагинов, ссылки на репозитории с начальным кодом и собранные для Windows и Linux бинарники для QtCreator 3.x.x прилагаются.

Изложение Api

Раньше каждого нужно сделать плагин (в диалоге File->New File or Project… предпочесть тип плана Libraries->Qt Creator Plugin). В диалоге создания плана будет нужно указать путь к исходникам QtCreator (которые вы получили из репозитория git) и директории с собранным QtCreator. Будем считать, что каркас плагина сделан и перейдем к изложению Api для размещения виджетов. Под Api в данном случае будут восприниматься способы, доступные для разработчика плагина (помещенные в public и не входящие в пространство имен (namespace) Internal).

Добавлять виджеты дозволено как во время инициализации плагина (в функции initialize), так и позже инициализации всех плагинов, от которых он зависит (в функции extensionsInitialized).
Существует три вероятности применения панели режимов: добавление виджетов (QWidget), добавление действий (QAction) и добавление режимов (производные IMode). Во всех случаях потребуется подключить заголовочный файл администратора режимов:

#include <coreplugin/modemanager.h>
1. Добавление виджетов (QWidget)

Добавление виджета выполняется с поддержкой static-функции Core::ModeManager::addWidget(QWidget *widget).
Разглядим код, тот, что добавляет примитивную надпись (QLabel) в панель. Для этого в реализации функцииinitialize плагина добавим дальнейший код:

//создаем виджет - контейнер для элементов
QWidget *container = new QWidget();
//создаем надпись
QLabel *info = new QLabel(QString::fromUtf8("hello habrahabr!"));
//задаем ей белый цвет текста, Дабы он контрастировал с темным фоном
info->setStyleSheet(QString::fromUtf8("QLabel {color: white; }"));
//создаем лейаут
QHBoxLayout *containerLayout = new QHBoxLayout();
//и добавляем в него надпись
containerLayout->addWidget(info);
//задаем для виджета-контейнера лейаут с надписью
container->setLayout(containerLayout);
//добавляем виджет-контейнер в панель
Core::ModeManager::addWidget(container);

Если запустить данный пример, то будет видно, как вмещая надпись целиком панель «растянулась» по ширине.

Для контроля над размерами будет пригодно для QHBoxLayout независимо определить отступы, расстояния между виджетами а также зафиксировать наивысший размер виджета-контейнера, тогда виджеты, расположенные в контейнере, «урежутся» под данный размер и Вы сумеете доработать их:

containerLayout->setContentsMargins(0,0,0,0);
containerLayout->setSpacing(0);
container->setMaximumWidth(70);

В приведенном выше коде отступы нулевые и виджет может занять максимально доступный размер (70). Если Вы измените отступы слева и справа, то значение максимальной ширины для виджета также нужно уменьшить на величину суммы отступов слева и справа.

В высоту доступно все свободное пространство. Но при этом стоит рассматривать, что если виджет начнет претендовать на пространство, занятое кнопками переключения режимов, то они потеснятся (при этом спрятав иконки, как показано на рисунке):

Об этом стоит помнить, если предполагается применение плагина на компьютере с касательно небольшим разрешением (скажем как у меня на ноутбуке: при разрешении 1366×768 без «урезания» еле вместилось 2 плагина, приведенных в конце статьи). Дозволено смоделировать эту обстановку, установив большее минимальное значение высоты виджета-контейнера, например:

container->setMinimumHeight(600);
2. Добавление действий (QAction)

Добавление действий выполняется с поддержкой функции:

Core::ModeManager::addAction(QAction *action, int priority)

где action — это нужное действие (сделанное разработчиком), а priority определяет очередность размещения действий. Чем поменьше значение, тем ниже будет расположена кнопка активации действия среди прочих (Run, Start Debugging, Build Project)
В приведенном ниже примере создается действие (QAction), которое (для примера) будет запускать скрипт сборки инсталлятора (скажем NSIS):

QAction *buildInstallerAction = new QAction(this);
buildInstallerAction->setIcon(QIcon(QString::fromUtf8(":/icons/icons/nsis48x48.png")));
buildInstallerAction->setText(QString::fromUtf8("Build installer"));
Core::ModeManager::addAction(buildInstallerAction, 0);

Текст «Build installer» будет отображаться в ToolTip. Так как priority равен «0», то GUI-элемент вызова действия будет в самом низу, как показано на рисунке:

Изображения для QIcon следует применять с размером 32×32 px, так как крупные все равно будут ужаты до этого размера.
Примечание: если нужно добавить уйма действий, то допустимо стоит подумать о добавлении QToolBar в QtCreator:

QMainWindow *mainWindow = qobject_cast<QMainWindow *> (Core::ICore::mainWindow());
QToolBar *toolbar = new QToolBar();
toolbar->addAction(action);
mainWindow->addToolBar(Qt::TopToolBarArea, toolbar);

Также действия дозволено добавить в область выбора плана с поддержкой функции

Core::ModeManager::addProjectSelector(QAction *action);

но в связи с специфичностью назначения этой области (выбор нынешнего плана и типа сборки) её применение в плагинах мне кажется не многообещающим.

3. Создание нового режима

В реальное время в QtCreator существует 7 режимов (от «Welcome» до «Help»). Если Вы захотите сделать личный режим, то для этого будет нужно сделать соответствующий класс, наследуя от Core::IMode, а после этого добавить его в систему растяжений:

ExtensionSystem::IPlugin::addObject(myMode); 

Создание нового режима (IMode) может потребоваться в том случае, если вероятностей отображения информации в панели итога (OutputPanel) неудовлетворительно. Скажем если Вы решите сделать UML-редактор, интегрированный в QtCreator. Данная тема довольно объемна, следственно не будем рассматривать ее в данной статье и перейдем непринужденно к плагинам.

Плагин отображения статистики пользователя Habrahabr

Представим Вы написали статью и поместили ее на прогре. Умно предположить, что Вас волнует, как её восприняло сообщество. Вариантов здесь не много: либо ее будут позитивно оценивать и, как итог, рейтинг будет расти, либо негативно — тогда рейтинг будет падать. Есть еще 3-й вариант, когда статья у пользователей Вызывает желание поставить минус в карму. В таком случае допустимо стоит (пока не поздно) снять статью с публикации. Безусловно дозволено написать скрипт и поставить его в cron на сервере, тот, что будет мониторить эти показатели и, в случае возникновения минуса, отправлять СМС сообщение пользователю, но на мой взор это теснее чрезмерно. Впрочем всякий раз, переключаясь с IDE на браузер только Дабы посмотреть статистику, разработчик тратит не только время, но и внимание. В таких обстановках мне вспоминается фраза: «Если Вы повторяете какую-либо последовательность действий больше 5 раз, то эту последовательность необходимо автоматизировать». Так собственно и возникла идея маленький автоматизации, которая дозволит мониторить расположение дел не отрываясь от программирования.

Разработанный плагин для заданного пользователя с определенной периодичностью (которая также задается в настройках в диапазоне от 1 до 60 минут) обращается к api сайта (http://habrahabr.ru/api/profile/username/), получает xml данные, парсит их и обновляет значения кармы и рейтинга. Настройки расположены на вкладке «Habrahabr» раздела «Environment».

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB