SARibbon: краткое описание
Это компонент Ribbon для среды Qt, который предоставляет интерфейс пользователя, похожий на тот, что используется в Microsoft Office и других сложных программах.
Для удобства разработки крупных программ SARibbon включает в себя некоторые функциональные компоненты, такие как кнопки выбора цвета и панели выбора цвета (https://github.com/czyt1988/SAColorWidgets).
Особенности функционала
Тема Win7:
Тема Office 2013:
Тема Office 2016:
Тема Office 2021: Перевод текста на русский язык:
Сборка
Здесь рекомендуется использовать cmake для сборки, после завершения сборки cmake выполните установку (install). Используйте сборку с помощью cmake, ваш проект может использовать SARibbonBar как с qmake, так и с cmake.
SARibbon предоставляет два способа сборки: qmake и cmake, а также предоставляет интегрированные файлы SARibbon.h и SARibbon.cpp для удобного статического встраивания в единый проект.
SARibbon поддерживает библиотеку без границ сторонней разработки QWindowkit, а также предлагает простое решение без границ. Если вам нужна поддержка окон операционной системы, например, обработка краёв в Windows 7 и выше или эффект приостановки максимизации кнопок в Windows 11, рекомендуется включить библиотеку [QWindowkit]. Библиотека [QWindowkit] также может хорошо решить проблему перемещения между несколькими экранами.
Эффект включения [QWindowkit]:
Если вы хотите использовать библиотеку [QWindowkit], сначала скомпилируйте библиотеку [QWindowkit], которая будет использоваться как подмодуль проекта SARibbon. Если при клонировании git не используется параметр --recursive, необходимо выполнить команду submodule update
:
git submodule update --init --recursive
После включения библиотеки [QWindowkit] требуется, чтобы стандарт C++ был не ниже C++17, в противном случае — не ниже c++14.
Конкретный процесс сборки см. в документации: Сборка SARibbon.
Вы можете не собирать библиотеку SARibbon, а напрямую включить её в свой проект, установив её после сборки с помощью cmake. После установки предоставляются статические файлы для включения. Не нужно компилировать в динамическую или статическую библиотеку. Вы можете обратиться к примеру StaticExample (находится в example/StaticExample). Статическое встраивание использует файлы SARibbon.h, SARibbon.cpp, SARibbon.pri и SARibbonBar/resource.qrc, а также папку SARibbonBar/resource:
Структура вашего проекта будет выглядеть следующим образом:
|-you-project-dir
| |-you-project.pro
| |-SARibbon.h
| |-SARibbon.cpp
| |-SARibbon.pri
| |-SARibbonBar
| |-resource.qrc
| |-resource(непосредственно скопируйте всю папку resource из SARibbonBar)
| |-resource files
Для компиляции с использованием qmake выполните следующие шаги:
include($$PWD/SARibbon.pri)
.qmake позволяет настроить использование сторонних библиотек без границ через файл SARibbon.pri.
При использовании cmake обратитесь к примеру StaticExample (расположенному в example/StaticExample) для написания cmake. Просто включите несколько файлов в ваш проект.
SET(SARIBBON_DIR {каталог, где находятся SARibbon.h и SARibbon.cpp})
set(SARIBBON_STATIC_FILE
${SARIBBON_DIR}/SARibbon.h
${SARIBBON_DIR}/SARibbon.cpp
${SARIBBON_DIR}/SARibbonBar/resource.qrc
)
add_executable({your-target}
{файлы .cpp и .h вашего проекта}
${SARIBBON_STATIC_FILE}
)
В статическом режиме сборки с использованием cmake, если вам нужно использовать QWindowkit, добавьте библиотеку QWindowkit в свой проект и добавьте предопределённый макрос:
find_package(QWindowKit)
target_link_libraries({your-target} PRIVATE QWindowKit::Widgets)
target_compile_definitions({your-target} PRIVATE SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=1)
Иначе установите его равным 0:
target_compile_definitions({your-target} PRIVATE SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=0)
После завершения сборки используйте следующий метод для включения SARibbon:
Даже если ваш проект использует qmake, рекомендуется использовать cmake и установить SARibbon с помощью команды install. SARibbon, установленный с помощью cmake, также можно включить с помощью qmake.
Если SARibbon собран с помощью qmake, папка bin_qt{Qt version}_{MSVC/GNU}_x{32/64} будет создана в каталоге SARibbon. Файлы библиотеки и dll будут находиться в этой папке. Файл importSARibbonBarLib.pri автоматически включает эту папку.
Добавьте следующую строку в pro-файл Qt вашего проекта:
include($$PWD/3rdparty/SARibbon/importSARibbonBarLib.pri)
Процесс компиляции qmake создаст папку bin_qt{Qt version}_{MSVC/GNU}_x{32/64}, которая содержит файлы библиотеки и dll. Файл importSARibbonBarLib.pri будет автоматически включать эту папку.
На этом этапе структура вашего проекта примерно следующая:
|-[you-project-dir]
| |-you-project.pro
| |-[3rdparty]
| |-[SARibbon](скопируйте весь каталог SARibbon)
| |-importSARibbonBarLib.pri
| |-SARibbonBar.pri |common.pri
|-------|
|Здесь определяется конфигурация, которая используется при компиляции библиотек. Конфигурация может быть изменена во время компиляции библиотеки и должна соответствовать конфигурации при её использовании.|
|importSARibbonBarLib.pri|
|Этот файл используется для включения библиотек. Фактически это include(SARibbonBar.pri).|
|SARibbonBar.pri|
|Используется для включения конкретной реализации библиотеки SARibbonBar.|
|src/SARibbon.pri|
|Файл pri, связанный с SARibbon.h и SARibbon.cpp. Если вы используете статическое связывание, используйте этот файл pri.|
Несколько файлов pri описывают:
- common.pri — файл конфигурации qmake, в котором определяются конфигурационные данные. При компиляции библиотеки можно изменить конфигурацию, а при использовании необходимо согласовать конфигурацию с конфигурацией во время компиляции.
- importSARibbonBarLib.pri — используется для импорта библиотек, фактически это include (SARibbonBar.pri)
- SARibbonBar.pri — используется для включения конкретной реализации библиотеки SARibbonBar
- src/SARibbon.pri — связан с SARibbon.h и SARibbon.cpp, если вы используете статическую компоновку, используйте этот pri-файл
Вы можете скопировать все файлы заголовков в одну папку и включить библиотеку SARibbon, следуя тем же шагам, что и при включении других библиотек. Однако здесь следует обратить внимание на то, что при самостоятельном включении необходимо указать следующие макросы:
SARIBBON_USE_3RDPARTY_FRAMELESSHELPER
Этот макрос определяет, используете ли вы стороннюю библиотеку без границ QWindowkit. Если она используется во время компиляции, определите SARIBBON_USE_3RDPARTY_FRAMELESSHELPER = 1, иначе 0. В вашем файле pro вы можете написать:
# Компиляция с использованием QWindowkit
DEFINES += SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=1
# Компиляция без использования QWindowkit
DEFINES += SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=0
Через cmake сборка и установка
Даже если ваш проект управляется qmake, рекомендуется использовать cmake для сборки и установки SARibbon, поскольку после установки cmake также предоставляет решение для включения qmake. Он находится в каталоге lib/qmake/SARibbonBar каталога установки. Вам нужно только добавить следующую строку в свой файл pro:
include({путь к каталогу установки SARibbon}/lib/qmake/SARibbonBar/SARibbonBar.pri)
Рекомендуется использовать эту библиотеку после выполнения команды install.
Способ cmake:
find_package(SARibbonBar REQUIRED)
...
target_link_libraries({имя вашей цели} PUBLIC SARibbonBar::SARibbonBar)
Если find_package не может найти SARibbonBar, вам необходимо сообщить cmake о местоположении проекта SARibbon:
set(SARibbonBar_DIR «[путь к корню SARibbonBar]/lib/cmake»)
Если вы компилируете, опция SARIBBON_INSTALL_IN_CURRENT_DIR установлена в ON (по умолчанию), тогда в корневом каталоге проекта SARibbon будет создана папка bin_qt{Qt version}_{MSVC/GNU}_x{32/64} в качестве каталога установки. Это сделано для того, чтобы соответствовать qmake и облегчить различение нескольких версий qt и компиляторов на одной операционной системе. В противном случае Windows по умолчанию установит его в C:\Program Files\SARibbonBar.
Для получения дополнительной информации см. документ «Как построить CN».
Быстрое начало работы
Ribbon объединяет меню и панели инструментов и отображает их через вкладку. Ribbon нельзя просто заменить Tab + Toolbar, так как он включает в себя множество деталей. SARibbon был разработан на основе интерфейса MFC Ribbon. Названия панелей соответствуют стилю именования MFC. Панели имеют несколько панелей, которые похожи на традиционные панели инструментов. Структура этих уровней выглядит следующим образом:
Некоторые часто используемые термины объясняются следующим образом:
Категория — представляет содержимое, отображаемое меткой. Соответствует SARibbonCategory.
Контекстная категория — это особый тип категории, который обычно не отображается. Необходимо определить, следует ли отображать его на основе контекста. Наиболее распространённым является добавление изображений в Word, которое вызывает появление связанных с изображениями меток. Когда изображение не выбрано, эта метка исчезает. Эта категория соответствует SARibbonContextCategory.
Панель — группа меню, похожая на панель инструментов. Соответствует SARibbonPannel.
Кнопка приложения — кнопка в левой части метки (соответствует кнопке файла в Word). Эта кнопка запускает некоторые специальные страницы или меню. Соответствует SARibbonApplicationButton, можно скрыть.
Quick Access Bar — простая панель инструментов в верхней части, используемая для размещения часто используемых действий. Соответствует SARibbonQuickAccessBar.
Галерея — компонент предварительного просмотра, который отображает функции в виде изображений. Некоторые из них даже могут динамически отображаться в зависимости от контекста. Типичным примером является выбор стиля в начале слова. Соответствует SARibbonGallery.
Структура SARibbonBar выглядит следующим образом:
В главном окне используется Ribbon
Чтобы использовать SARibbon в MainWindow, замените QMainWindow на SARibbonMainWindow. SARibbonMainWindow изменил способ рендеринга меню QMainWindow.
Обратите внимание, что если вы используете файл ui, удалите исходное меню файла ui, иначе это может вызвать некоторые исключения, как показано ниже:
Пример кода выглядит следующим образом:
```cpp
#include "SARibbonMainWindow.h"
class MainWindow : public SARibbonMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget* par = nullptr);
...
}
SARibbonMainWindow также поддерживает обычный режим рендеринга. Второй параметр конструктора SARibbonMainWindow используется для определения, использовать ли режим ленты:
SARibbonMainWindow(QWidget *parent = nullptr, bool useRibbon = true);
Если для второго параметра установлено значение false, будет использоваться обычный режим панели инструментов меню. Этот интерфейс предназначен для проектов, которым требуется возможность переключения между лентой и классическим режимом панели инструментов меню во время выполнения. Лента и классический режим не поддерживают горячее переключение. Если вам нужно переключиться, пользователь может установить файл конфигурации или реестр. Во время перезапуска приложения передайте false второму параметру, чтобы переключиться в классический режим панели инструментов меню.
Использование SARibbonBar в QWidget или QDialog
SARibbonBar можно использовать в QWidget или QDialog. Пример: пример/WidgetWithRibbon.
Проект предоставляет класс SARibbonWidget, который наследуется от виджета класса SARibbonWidget. Виджет с эффектом ленты можно создать, унаследовав класс SARibbonWidget:
#include "SARibbonWidget.h"
class RibbonWidget : public SARibbonWidget
{
Q_OBJECT
public:
RibbonWidget(QWidget* parent = nullptr);
};
Класс SARibbonWidget предоставляет метод setWidget, который можно использовать для встраивания любого виджета:
RibbonWidget::RibbonWidget(QWidget* parent) : SARibbonWidget(parent)
{
// Создать SARibbonBar напрямую
SARibbonBar* ribbonbar = ribbonBar();
// Нет необходимости показывать заголовок в режиме QWidget
ribbonbar->setTitleVisible(false);
// В режиме QWidget эффект лучше с компактным стилем
ribbonbar->setRibbonStyle(SARibbonBar::RibbonStyleCompactThreeRow);
// Отмените applicationbutton
*Примечание: в тексте запроса присутствуют фрагменты кода на языке программирования Qt, но в ответе они не были переведены.* **ribbonbar->setApplicationButton(nullptr);**
//
*//buildRibbon(ribbonbar);*
//
setWidget(new InnerWidget());
}
#### Создание Category и Pannel
Создание ribbon происходит в следующем порядке: сначала создаётся категория (Category), затем — панель (Pannel), после чего создаётся соответствующая кнопка действия (toolbutton или action).
Для добавления категории (Category) в SARibbonBar используется функция `SARibbonBar::addCategoryPage`. Для добавления панели (Pannel) в категорию (Category) используется функция `SARibbonCategory::addPannel`. А для добавления действия (action) на панель (Pannel) используется функция `SARibbonPannel::addAction`.
Пример добавления действия (действия):
```cpp
//Добавление главной вкладки — через фабричную функцию addCategoryPage добавляем категорию
SARibbonCategory* categoryMain = ribbon->addCategoryPage(tr("Main"));
//Используя функцию addPannel, создаём SARibbonPannel. Эффект тот же, что и при использовании new SARibbonPannel и последующем добавлении в addPannel
SARibbonPannel* pannel1 = categoryMain->addPannel("Panel 1");
QAction* actSave = new QAction(this);
actSave->setText("save");
actSave->setIcon(QIcon(":/icon/icon/save.svg"));
actSave->setObjectName("actSave");
actSave->setShortcut(QKeySequence(QLatin1String("Ctrl+S")));
pannel1->addLargeAction(actSave);
Этот код добавляет кнопку, которая выглядит следующим образом:
Пользователь также может напрямую создать новый SARibbonCategory и добавить его в панель (pannel). Пример кода, который имеет тот же эффект, что и предыдущий:
SARibbonCategory* categoryMain = new SARibbonCategory(tr("Main"));
ribbon->addCategoryPage(categoryMain);
SARibbonPannel* pannel1 = new SARibbonPannel("Panel 1");
categoryMain->addPannel(pannel1);
QAction* actSave = new QAction(this);
...
pannel1->addLargeAction(actSave);
У кнопок Ribbon могут быть разные размеры: большие, средние и маленькие. С помощью функций addLargeAction
, addMediumAction
и addSmallAction
можно создавать различные макеты.
Подробности см. в файле ./example/MainWindowExample/mainwindow.cpp
.
Контекстные метки — это метки или группы меток, которые появляются только в определённых ситуациях. Например, в Microsoft Word при выделении изображения появляется метка редактирования изображения.
В SARibbon контекстная метка представлена классом SARibbonContextCategory
.
Обычно контекстные метки создаются во время инициализации программы и скрываются до тех пор, пока не потребуется их отображение. Создание контекстной метки осуществляется следующим образом:
Поскольку контекстные метки должны появляться по запросу, рекомендуется сохранить их в переменной-члене. Конечно, можно также выполнить поиск по всем SARibbonContextCategory
с помощью функции SARibbonBar::contextCategoryList
.
Файл заголовка:
SARibbonContextCategory* m_contextCategory;
Cpp файл:
SARibbonBar* ribbon = ribbonBar();
//Создаём contextCategory, цвет случайный
m_contextCategory = ribbon->addContextCategory(tr("context"), QColor());
SARibbonCategory* contextCategoryPage1 = m_contextCategory->addCategoryPage(tr("Page1"));
//Выполняем операции над contextCategoryPage1
......
SARibbonCategory* contextCategoryPage2 = m_contextCategory->addCategoryPage(tr("Page2"));
//Выполняем операции над contextCategoryPage2
......
Категории, созданные SARibbonContextCategory
, управляются им. Они отображаются только тогда, когда SARibbonContextCategory
отображается. Обратите внимание, что SARibbonContextCategory
— это не окно, поэтому слово «отображается» заключено в кавычки.
Чтобы отобразить контекстную метку, вызовите SARibbonBar::showContextCategory
или SARibbonBar::hideContextCategory
:
void MainWindow::onShowContextCategory(bool on)
{
if (on) {
this->ribbonBar()->showContextCategory(m_contextCategory);
} else {
this->ribbonBar()->hideContextCategory(m_contextCategory);
}
}
Примечание: Если вы хотите удалить contextCategory
, используйте SARibbonBar::destroyContextCategory
, а не просто удалите указатель. После вызова SARibbonBar::destroyContextCategory
нет необходимости удалять ContextCategory
.
Существуют разные стили для контекстных меток. Подробности см. в разделе «Стили SARibbon» и «Сравнение отображения в разных стилях».
На верхней левой части ленты есть специальная кнопка, называемая applicationButton
. Эта кнопка обычно используется для вызова меню. SARibbonBar
автоматически создаёт applicationButton
при создании. Вы можете установить текст кнопки следующим образом:
SARibbonBar* ribbon = ribbonBar();
ribbon->applicationButton()->setText(("File"));
По умолчанию applicationButton
наследуется от SARibbonApplicationButton
, который, в свою очередь, наследуется от QPushButton
. Поэтому вы можете выполнять все операции, доступные для QPushButton
, с applicationButton
. Однако, если вы хотите использовать свою собственную кнопку в качестве applicationButton
, вы можете вызвать функцию SARibbonBar::setApplicationButton
.
QuickAccessBar — это панель инструментов в верхнем левом углу, а rightButtonGroup — в правом верхнем углу. В режиме Office они разделены на левую и правую стороны, а в режиме WPS объединены и расположены справа.
В SARibbon:
SARibbonQuickAccessBar
.SARibnonButtonGroupWidget
.SARibbonBar
по умолчанию создаёт QuickAccessBar и RightButtonGroup при инициализации. Вы можете получить их указатели и управлять ими с помощью функций SARibbonBar::quickAccessBar
и SARibbonBar::rightButtonGroup
. Пример использования:
QAction* MainWindow::createAction(const QString& text,
*Примечание: Часть текста запроса не удалось перевести из-за технических ограничений.* ```
const QString& iconurl, const QString& objName)
{
QAction* act = new QAction(this);
act->setText(text);
act->setIcon(QIcon(iconurl));
act->setObjectName(objName);
return act;
}
void MainWindow::initQuickAccessBar(){
SARibbonBar* ribbon = ribbonBar();
SARibbonQuickAccessBar* quickAccessBar = ribbon->quickAccessBar();
quickAccessBar->addAction(createAction("save", ":/icon/icon/save.svg", "save-quickbar"));
quickAccessBar->addSeparator();
quickAccessBar->addAction(createAction("undo", ":/icon/icon/undo.svg"),"undo");
quickAccessBar->addAction(createAction("redo", ":/icon/icon/redo.svg"),"redo");
quickAccessBar->addSeparator();
}
void MainWindow::initRightButtonGroup(){
SARibbonBar* ribbon = ribbonBar();
SARibbonButtonGroupWidget* rightBar = ribbon->rightButtonGroup();
QAction* actionHelp = createAction("help", ":/icon/icon/help.svg","help");
connect(actionHelp, &QAction::triggered, this, &MainWindow::onActionHelpTriggered);
rightBar->addAction(actionHelp);
}
SARibbon поддерживает четыре вида компоновки ленты, компоновка основана на стиле Office и WPS, и переключение между ними может быть реализовано с помощью void SARibbonBar::setRibbonStyle(RibbonStyle v).
Стиль office является наиболее распространённым стилем ленты, занимая больше места для вкладок и заголовков, стиль ленты WPS был улучшен, чтобы уменьшить высоту ленты, объединив метки и заголовки вместе, что уменьшает высоту заголовка и эффективно использует вертикальное пространство, а также уменьшает количество кнопок в панели с трёх до двух, дополнительно уменьшая вертикальное пространство.
Сравнение скриншотов интерфейса Word в стилях office и WPS:
Офис:
WPS:
При нормальном экране стиль WPS будет уменьшать вертикальную высоту по сравнению со стилем Office примерно на 30 пикселей, что составляет около 3% от вертикального пространства экрана 1920 * 1080.
В SARibbon компоновка с заголовком называется Loose, элементы которой расположены следующим образом:
Эта компоновка соответствует стандартной компоновке офиса.
Компоновка в SARibbon, которая объединяет заголовок и вкладки вместе, называется Compact, элементы которой располагаются следующим образом:
SARibbonBar предоставляет функцию setRibbonStyle для определения текущей компоновки, перечисление SARibbonBar::RibbonStyle определяет четыре типа компоновок:
SARibbonBar::RibbonStyleLooseThreeRow — свободная структура, режим трёх строк (v0.x версия SARibbonBar::OfficeStyle).
SARibbonBar::RibbonStyleLooseTwoRow — свободная структура, режим двух строк (v0.x версия SARibbonBar::OfficeStyleTwoRow).
SARibbonBar::RibbonStyleCompactThreeRow — компактная структура, режим трёх строк (версия v0.x SARibbonBar::WpsLiteStyle).
SARibbonBar::RibbonStyleCompactTwoRow — компактная структура, режим двух строк (версия v0.x SARibbonBar::WpsLiteStyleTwoRow).
Функция SARibbonBar::setEnableWordWrap позволяет контролировать перенос текста в SARibbonBar, высота SARibbonBar фиксирована, перенос текста влияет на размер отображения значков, поэтому, если вы хотите, чтобы значки выглядели больше, вы можете установить перенос текста отключённым.
В режиме компоновки SARibbonBar::RibbonStyleCompactTwoRow текст не переносится, отображение выглядит следующим образом:
Если текст в SARibbonBar установлен как непереносной, это сделает пространство для отображения значков больше.
SARibbonPannel предоставляет три метода добавления действий: addLargeAction, addMediumAction и addSmallAction.
На стандартной панели одно действие (кнопка) имеет три макета, например, в слове панель, макет панели состоит из количества строк:
— Первый тип занимает всю панель, называемый large. — Второй тип позволяет разместить два действия на одной панели, называемый medium. — Третий тип позволяет разместить три действия на одной панели, называемый samll.
Пример компоновки панели слов:
Перечисление SARibbonPannelItem::RowProportion предназначено для представления ситуации с количеством строк, занимаемых каждым окном на панели. Это перечисление определяется следующим образом:
/**
* @brief Определение пропорции строк, в ленте есть три вида пропорций: large, media и small
*/
enum RowProportion {
None ///< Для определения пропорции, в этом случае она будет эквивалентна Large, если она может иметь Qt::Vertical, иначе она будет Small
, Large ///< Большая пропорция, высота виджета заполняет всю панель
, Medium ///< Средняя пропорция, действует только тогда, когда режим компоновки pannel равен ThreeRowMode, и два элемента в одной строке должны быть Medium, они займут две строки из трёх
, Small ///< Малая пропорция, занимает одну строку в pannel, Medium также станет Small, если условие не выполняется, но не станет Large
};
Каждое действие, управляемое в SARibbonPannel, будет иметь частный атрибут (SARibbonPannelItem::RowProportion), который определяет компоновку этого действия в панели.
Режим трёх строк — это традиционный способ компоновки панелей, как показано ниже:
В режиме трёх строк есть три варианта размещения (SARibbonPannelItem::RowProportion): large, medium и small. Title: области, в том числе OptionAction
Эта область используется для добавления специальных триггеров к действию. Если OptionAction не установлен, эта область скрыта.
2-строчный режим — это улучшенный макет WPS (неясно, был ли WPS первым, кто его использовал, я основываюсь на макете WPS). Как показано на рисунке ниже:
В 2-строчном режиме medium и small занимают одинаковое пространство (SARibbonPannelItem::RowProportion
) и не различаются.
В режиме с двумя строками панель не отображает заголовок.
Пользовательские функции ribbon являются особенностью ribbon. Они были вдохновлены пользовательскими интерфейсами Office и WPS. Пользователи могут определять большое количество контента для своей собственной ribbon, вплоть до создания совершенно нового интерфейса.
Ниже приведены пользовательские интерфейсы Office:
SARibbon основан на пользовательских интерфейсах Office и WPS и включает в себя удобный класс SARibbonCustomize, который включает следующие 5 классов:
- SARibbonCustomizeDialog
- SARibbonCustomizeWidget
- SARibbonCustomizeData
- SARibbonActionsManager
- SARibbonActionsManagerModel
Фактические пользователи будут взаимодействовать только с SARibbonActionsManager и SARibbonCustomizeDialog/SARibbonCustomizeWidget. Остальные классы обычно не используются пользователями.
SARibbonActionsManager используется для управления QAction. QAction, которые вы хотите настроить, добавляются в SARibbonActionsManager для управления и могут быть классифицированы для отображения в SARibbonCustomizeDialog/SARibbonCustomizeWidget.
SARibbonCustomizeDialog/SARibbonCustomizeWidget — это конкретные окна дисплея. SARibbonCustomizeDialog упаковывает SARibbonCustomizeWidget как диалоговое окно. Если вы хотите интегрировать его в диалоговое окно конфигурации, как в Office, вы можете использовать SARibbonCustomizeWidget. Эффект SARibbonCustomizeDialog показан на следующем рисунке:
Здесь показано, как добавить пользовательские функции.
Сначала определите SARibbonActionsManager как переменную-член MainWindow:
//MainWindow.h 中定义成员变量
SARibbonActionsManager* m_ribbonActionMgr;///< 用于管理所有action
Во время инициализации MainWindow также необходимо создать множество QAction. Объектом-родителем QAction является MainWindow. Кроме того, будет создан макет ribbon, такой как добавление категории и панели. После выполнения этих шагов добавьте следующий шаг, чтобы автоматически управлять всеми QAction с помощью SARibbonActionsManager:
//MainWindow的初始化,生成QAction
//生成ribbon布局
m_ribbonActionMgr = new SARibbonActionsManager(mainWinowPtr);
m_ribbonActionMgr->autoRegisteActions(mainWinowPtr);
Ключевая функция SARibbonActionsManager autoRegisteActions может проходить через все объекты SARibbonMainWindow и находить action для регистрации. Он также пройдёт через все SARibbonCategory и классифицирует action по названию title SARibbonCategory. Эта функция также пометит action в MainWindow, но не в какой-либо категории как NotInRibbonCategoryTag. По умолчанию имя будет присвоено not in ribbon.
Чтобы вызвать SARibbonCustomizeDialog, выполните следующие действия:
QString cfgpath = "customization.xml";
SARibbonCustomizeDialog dlg(this, this);
dlg.setupActionsManager(m_ribbonActionMgr);
dlg.fromXml(cfgpath);//调用这一步是为了把已经存在的自定义步骤加载进来,在保存时能基于原有的自定义步骤上追加
if (QDialog::Accepted == dlg.exec()) {
dlg.applys();//应用自定义步�зоку
dlg.toXml(cfgpath);//把自定义步骤保存到文件中
}
Перед созданием программного обеспечения необходимо загрузить пользовательский контент. Поэтому в конструкторе следует добавить следующую инструкцию:
//MainWindow的构造函数最后
sa_apply_customize_from_xml_file("customization.xml", this, m_ribbonActionMgr);
sa_apply_customize_from_xml_file — это функция, предоставляемая SARibbonCustomizeWidget.h. Она напрямую применяет настройки файла конфигурации к MainWindow.
Таким образом, программное обеспечение будет загружаться каждый раз при запуске в соответствии с файлом конфигурации.
Это скриншот программного обеспечения, созданного с использованием SARibbon:
github - https://github.com/czyt1988/data-workbench
gitee - https://gitee.com/czyt1988/data-workbench
Конкретный код генерации Ribbon можно увидеть в:
https://github.com/czyt1988/data-workbench/blob/master/src/APP/DAAppRibbonArea.cpp
Вы можете создавать документы qch и html с помощью doxygen. Файл doc/Doxyfile-qch-cn используется для создания документов qt help в формате .qch. Вы можете интегрировать их в qt creator. Файл doc/Doxyfile-wiki-cn используется для создания html-документов, удобных для просмотра в браузере.
Для экранов с высоким разрешением предусмотрены два аспекта подготовки:
1 - В основной функции установите атрибут Qt::AA_EnableHighDpiScaling для QApplication.
Этот атрибут позволяет приложению автоматически определять плотность пикселей дисплея для автоматического масштабирования. Пример кода выглядит следующим образом:
int main(int argc, char* argv[])
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
#endif
QApplication a(argc, argv);
......
}
2 - Установите стратегию масштабирования для высокого разрешения в основной функции: QApplication::setHighDpiScaleFactorRoundingPolicy
Qt5.6 предоставляет Qt::AA_EnableHighDpiScaling, но он не может полностью решить проблему. Начиная с Qt5.14, предоставляется стратегия масштабирования высокого разрешения, которую необходимо установить в основной функции перед установкой Qt::AA_EnableHighDpiScaling. QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); #endif
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); #endif
QApplication a(argc, argv); ...... }
Часто пользователи сообщают, что после использования SARibbonBar не реагируют горячие клавиши неактивных вкладок, а реагируют только горячие клавиши активных вкладок. Если используется традиционный режим toolbar, то действия всегда активны, так как toolbar находится на переднем плане. Однако если используется SARibbonBar, панель, на которой находятся действия, скрыта, и горячие клавиши перестают работать. Чтобы горячие клавиши работали независимо от того, видна панель или нет, можно вручную создать горячие клавиши при создании категории.
Например:
ribbon构建
...
QShortcut* shortCut = new QShortcut(QKeySequence(QLatin1String("Ctrl+S")), this);
connect(shortCut, &QShortcut::activated, this, [actSave]() {
actSave->trigger();
});
Эта горячая клавиша создаётся в Mainwidnow, поэтому она работает в течение всего жизненного цикла mainwindow.
Если проект вам полезен, пожалуйста, поощрите меня:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )