Плагин, добавляющий табы в QtCreator


    В статье описан способ добавления в QtCreator вкладок с помощью системы расширений (плагина), который не требует модификации исходного кода самого QtCreator.

    При переходе на использование IDE QtCreator кажется необычным отсутствие привычных вкладок для открытых файлов. Со временем привыкаешь к другими средствами навигации по исходниками. В QtCreator таких средств насчитывается как минимум шесть:
    • для переключения между .h и .cpp файлами удобно использовать клавишу F4;
    • все открытые файлы отображаются в панели «Open Documents»;
    • Ctrl+Tab отобразит список всех открытых файлов прямо в области редактирования;
    • Ctrl+K отобразит список файлов с фильтрацией по мере ввода текста;
    • Alt+Left позволяет перемещаться по истории навигации между открытыми файлами;
    • также можно осуществлять навигацию по дереву проекта.

    Все эти способы незаменимы, когда ведется редактирование множества файлов одновременно. При редактировании небольшого количества исходников использование вкладок, по моему скромному мнению, является более удобным. В пользу вкладок также говорит их широкое использование при реализации интерфейса MDI (Multi Document Interface) в средах разработки, текстовых редакторах, программах просмотра и браузерах.

    Тема вкладок неоднократно поднималась на форумах. Разработчики даже включили вопрос «Why does Qt Creator not use tabs for editors?» в перечень F.A.Q. В ответе на этот вопрос приводятся следующие аргументы:
    • Табы — это не масштабируемое решение. Они хорошо работают при 5-6 открытых редакторах, но становятся грамоздкими при 10-ти. При дальнейшем увеличении количества редактируемых файлов навигация с помощью табов становится очень затруднительной.
    • Табы не адаптируются под ваши настройки рабочего окружения.
    • Табы принуждают вас ограничивать число открытых редакторов, так как в ином случае вы начинаете путаться.

    Чтобы этот плагин не шел в разрез с идеологией QtCreator предлагаю сразу ограничить область его применения: редактирование небольшого (до 10) числа файлов. Плагин конечно позволяет открывать и большее число редакторов, но в этом случае все же лучше использовать возможности QtCreator, перечисленные в начале статьи.

    Основные особенности:
    • гармоничный QSS стиль табов (вкладки не мозолят глаза и съедают всего порядка 18 px);
    • поддержка цветовых схем QtCreator (Tools->Options-Environment->General->Color);
    • возможность переключения между 10-ти вкладками комбинацией клавиш (Ctrl+Alt+N, где N — клавиша в цифровом ряду от 1 до 0 ). Пытался добавить более короткие комбинации клавиш, но все они оказались уже «зарезервированы»;
    • отображение вкладок во всех режимах (Edit, Design, etc), что позволяет переключаться между редактированием *.ui формы и файлом соответствующего класса в один клик мыши по табу (или с помощью горячих клавиш).

    Плагин не лишен недостатков:
    • в настоящее время плагин не полностью поддерживает split-конфигурацию окна редактора (когда область редактирования разделяется на несколько подобластей TabBar остается один для всех).

    P.S. Прошу воспринимать этот небольшой пост как анонс еще одного плагина. Надеюсь он будет полезен сообществу Qt-программистов.

    Ссылки:

    1. Страница проекта на Sourceforge.net (в настоящее время не поддерживается, для новых версий QtCreator смотрите ссылку 2).
    2. Форк разработчика Oleg Shparber на GitHub. Исходники работающего в новых версиях плагина стоит искать там.

    Для установки плагина содержимое архива необходимо распаковать в директорию, где располагаются плагины:
    для Windows обычно C:\Qt\Tools\QtCreator\lib\qtcreator\plugins.
    для Lunux-based систем /home/username/Qt5.2.0/Tools/QtCreator/lib/qtcreator/plugins при установке Qt в директорию пользователя. Или (как вариант) /opt/Qt5.2.0/Tools/QtCreator/lib/qtcreator/plugins (устанавливалось на Ubuntu).
    для Mac OS X /Applications/Qt Creator.app/Contents/PlugIns

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 37

    • UFO just landed and posted this here
      • UFO just landed and posted this here
          +2
          Для Linux плагины QtCreator располагаются в директории ${qt-dir}/Tools/QtCreator/lib/qtcreator/plugins
          • UFO just landed and posted this here
        0
        Я сколько ни работал со списком открытых файлов QtCreator, так комфорт и не почувствовал. Авторы говорят про «больше 10», а нахрена оно мне больше 10? В реальности как раз обычно и открыто 6-10 вкладок, дальше уже теряешься. Ctrl-Tab неудобно, Ctrl-K еще нормально.
        В общем, за плагин Вам большой респект. Ну вот отсутствие сплита — фатальнейший недостаток. Не представляю, как работать на мониторе с одним открытым исходником.
          0
          Так ctrl+e,3 же?
            0
            Это сплит. При чем здесь это?
            0
            Сам сплит есть, как часть самого QtCreator. Нет его поддержки плагином в том смысле, что при разбиении редактора на две области TabBar остается один для обеих областей, что на мой взгляд не совсем правильно (но привыкнуть возможно). Хотелось бы, чтобы TabBar создавался свой для каждого сплита, но я не вижу способа, как это сделать только с помощью API (не затрагивая закрытые методы и данные самого QtCreator).
              0
              Сегодня потестил — нормально. Если по памяти разбить, что первые 5 вкладок к левой панели, а вторые 5 — к правой, то все удобно.
              Спасибо!
              0
              фиг знает. У меня всегда в креаторе открыто больше 10. Я бы сказал от 20 примерно и до бесконечности
              0
              Супер! А плагина добавляющего нормальный тулбар с кнопками нет еще?
              (впрочем, как я понимаю исходники этого плагина открыты, значит можно разорбраться и написать самому, но вддуг уже готовое есть?)
                0
                Мне такого плагина не попадалось (готовлю статью-обзор существующих плагинов сторонних разработчиков и ищу их на GitHub, sourceforge, форумах), но его действительно можно написать самому. В частности в функции initialize плагина необходимо получить указатель на виджет, в котором размещаются менеджер редакторов (EditorManager) (а вместе с ним и все редакторы):
                Core::EditorManager *em = Core::EditorManager::instance();
                Core::EditorManagerPlaceHolder *emph = static_cast<Core::EditorManagerPlaceHolder* >(em->parent());
                

                и в нем уже разместить нужные виджеты, например QFrame:
                QFrame backgroundFrame = new QFrame(emph);
                emph->layout()->addWidget(backgroundFrame);
                

                необходимо также добавить заголовочный файл менеджера редакторов (помимо прочих):
                #include <coreplugin/editormanager/editormanager.h>
                

                А какие действия, на ваш взгляд, целесообразно вынести в ToolBar? Мне на ум пришло «Auto Indent», которое выделяет весь текст и выполняет для него «Auto Indent Selection» (для этого действия по умолчанию нет хоткея). Или например «Advancend Find For Current Project» (для которого есть хот-кей из трех клавиш, но требуется еще выбор из ListBox'a). Конечно целесообразно сделать состав ToolBar'a настраиваемым, но в нем все равно должны быть какие-то действия по умолчанию (наиболее востребованные, за которыми неудобно лезть в меню или для которых есть сложные комбинации клавиш).
                  0
                  Да все то же самое что и в Студии. Я например заметил, что пользуюсь в Студии кнопками: Save, Save all, Undo, Redo, Switch cpp/h, Build, Rebuild, Find. Navigate forward/backward, build, run и debug — уже есть в creator'e. В идеале конечно лучше всего сделать диалог настроек, в котором можно самому конфигурировать тулбар, добавляя в него действия и перемещая пиктограммы.
                  В Creator'е даже кнопки Save нет, а у меня привычка время от времени сохранять изменения. На автомате веду курсор мыши к левому верхнему углу, а там ничего нет… неуютно:)
                    +1
                    В Creator'е даже кнопки Save нет, а у меня привычка время от времени сохранять изменения.

                    Ctrl+S же
                      0
                      Я знаю, но мне ближе кнопки на тулбаре. Из всех клавиш пользуюсь почему-то толко Ctr+F и сочетаниями для copy/cut/paste.
                  +1
                  Если есть желание написать плагин, добавляющий ToolBar, то возможно вам пригодится:

                  1. добавление QToolBar в QtCreator

                  QWidget *coreWidget = Core::ICore::mainWindow(); //получаем указатель на главный виджет QtCreator
                  QMainWindow *mainWindow = qobject_cast<QMainWindow *>(coreWidget); //преобразуем в QMainWindow
                  //далее добавляем ToolBar как к обычному QMainWindow 
                  QToolBar * fileToolBar = new QToolBar(QString::fromUtf8("Tools"));
                  mainWindow->addToolBar(fileToolBar);
                  

                  2. получение списка всех команд, зарегистрированных в QtCreator

                  QList<Core::Command *> commandsList = Core::ActionManager::commands();
                      for (int i = 0 ; i < commandsList.count() ; i++)
                      {
                          if (commandsList.at(i)->action()) //не у всех Command есть свой QAction
                          {
                              qDebug()  <<   QString::fromUtf8("Action: ")
                                                 << commandsList.at(i)->action()->text()
                                                 <<  QString::fromUtf8( "Description: ")
                                                 <<  commandsList.at(i)->description();
                          }
                      }
                  
                  0
                  Огромное спасибо за такой полезный плагин. Несколько предложений, которые помогут его улучшить:
                  1. Я использую Qt Creator со своей цветовой гаммой, и лента табов в таком случае выглядит несколько инородно:

                  image

                  Есть ли возможность прочитать цвет среды, используемый пользователем и применить его к табу (1)? А фон ленты табов сделать, например, на основе цвета MenuBar'а (2). В исходниках Qt Creator можно найти функцию, отвечающую за установку цветовых градиентов GUI-элементов на основе выбранного пользователем цвета.

                  2. Вот этот момент хотелось бы отшлифовать:

                  image

                  Если в ленту не входят все вкладки, появляются кнопки, налезающие на её название. Быть может сделать так, чтобы кнопки никогда не накладывались на название, а были всегда рядом? На мой взгляд, так лаконичнее:

                  image
                    +1
                    Спасибо за ценные предложения, обязательно доработаю по всем пунктам. Даже и не знал, что такие цветовые схемы существуют. А вот про налезающие кнопки знал, но сам «схалявил» — подумал что мало кто заметит.
                      0
                      А расскажите как вы сделали свою цветовую гамму?
                        0
                        Видимо в настройках Environment->General в группе User Interface выбрать цвет с помощью Color Picker

                          0
                          В настройках Qt Creator, как уже отметил snasoft.
                          А если вы хотите более продвинутую настройку цветовой гаммы, советую заглянуть в этот топик.
                        0
                        Ну наконец-то! Спасибо!
                          +2
                          Обновил до версии 0.0.2:

                          исправлена недоработка, при которой после сохранения файла он продолжает помечаться * (как модифицированный). Случай возникал при автосохранении перед запуском сборки;
                          — теперь цвет берется из настроек цветовой схемы самого QtCreator'a (пример на рисунке), после смены настроек цветов необходимо перезапустить QtCreator (чтобы изменения затронули и табы);
                          — скроллер (элемент прокрутки табов, когда они не помещаются все одновременно) сделан непрозрачным;
                          — удалил весь отладочный вывод.



                          Исходники в репозитории и архивы обновлены для всех систем за исключением Mac OS X (пока только версия 0.0.1).
                          Ссылки в статье на архивы с скомпилированными плагинами теперь указывают не на файлы архивов, а на директории для загрузки под конкретную систему (сделано чтобы каждый раз не редактировать ссылки на загрузку).
                            0
                            Отличный плагин, но табы пропадают при переключении из режима «Edit» в «Debug» или «Analyze».
                              +3
                              Обновил до версии 0.0.3.
                              • теперь табы отображаются во всех режимах QtCreator (редактора, дизайнера, справки и др.) и расположены сразу под главным меню. Это позволяет переключаться к редактированию того или иного файла сразу из любого режима (в том числе из справочной системы, минуя переключение в режим Edit — данный режим включится автоматически).
                              • еще одно улучшение: для форм (файлов *.ui) также появляется вкладка, при переходе на которую сразу отображается редактор формы.

                              • UFO just landed and posted this here
                                  0
                                  Спасибо за отзыв.
                                  Просмотрел мельком Цикл статей по сборке RPM и DEB пакетов. Там везде указывается, что пакеты собариются для программы, а тут ведь просто плагин, имеет ли смысл для него делать RPM? Мне просто интересно, какие преимущества у RPM перед простым копированием плагина в папку? Вообще (на мой взгляд) было бы здорово, если бы QtCreator имел полнофункциональный менеджер плагинов, который самостоятельно (или по команде) будет проверять обновления, обновлять существующие плагины, предоставлять список доступных (и новых) плагинов из единого репозитория. Сейчас же, если человек сам не заинтересуется в возможности расширения функционала IDE за счет плагинов, то скорее он о них и не узнает.
                                  +1
                                  Собранный плагин не работает с QtCreator 3.1.2 (Windows)
                                  Не удалось разрешить зависимость «Core(3.0.0)»
                                  Не удалось разрешить зависимость «TextEditor(3.0.0)»
                                    0
                                    Решение:
                                    Открываем файл TabbedEditor.pluginspec в папке с плагином.

                                    <dependency name="Core" version="3.0.0"/>
                                    <dependency name="TextEditor" version="3.0.0"/>

                                    исправляем на

                                    <dependency name="Core" version="3.1.2"/>
                                    <dependency name="TextEditor" version="3.1.2"/>
                                      0
                                      Огромное спасибо.
                                    0
                                    Под QtCreator 3.2 не собирается.
                                    tabsforeditorswidget.cpp:6:36: fatal error: texteditor/itexteditor.h: Нет такого файла или каталога
                                      0
                                      На QtCreator 3.3 не пашет.
                                      i.imgur.com/qHa380S.png
                                        +1
                                        Чуток помучался и пересобрал под виндовый QtCreator 3.3 (Qt 5.4, MSVC2010 32bit)
                                        rghost.ru/59805657
                                        0
                                        Актуальная версия на GitHub (Форк разработчика Oleg Shparber, на SourceForge плагин не работает в новых версиях QtCreator).
                                          0
                                          Прошу прощения, в комментарии выше неверно указана ссылка, правильная: github.com/trollixx/qtcreator-tabbededitor-plugin
                                            0
                                            Здравствуйте.
                                            Есть ли обновления для плагина? Последний релиз от декабря 2014, т.е. более 5 лет назад.
                                            Спасибо.

                                        Only users with full accounts can post comments. Log in, please.