中文档点击这里,QQ群:434014314
윈도우(2019, 최신) | 리눅스 우분투(20.04, 최신) | Mac(11-최신) | |
---|---|---|---|
Qt5.12 | |||
Qt5.13 | |||
Qt5.14 | |||
Qt5.15 | |||
Qt6.0 | |||
Qt6.1 | |||
Qt6.2 | |||
Qt6.3 | |||
Qt6.4 | |||
Qt6.5 | |||
Qt6.6 |
이는 Microsoft Office 소프트웨어와 유사한 인터페이스를 제공하는 Qt
프레임워크의 Ribbon control
입니다. SARibbon
은 대규모 소프트웨어, 산업용 소프트웨어, 복잡한 소프트웨어 UI에 적합합니다. SARibbon
은 MFC 리본 인터페이스의 명명 스타일을 참조하여 설계되었으며, SARibbon
의 인터페이스 스타일은 Microsoft Office 시리즈 소프트웨어와 WPS 소프트웨어의 리본 인터페이스를 참조하며 두 가지의 장점을 결합합니다. SARibbon
은 다양한 테마 스타일을 정의할 수 있는 리본 위젯이며 qss를 통해 원하는 테마 스타일을 빠르게 정의할 수 있습니다. 대규모 소프트웨어 개발을 용이하게 하기 위해 SARibbon
색상 위젯과 같이 일반적으로 사용되는 일부 기능 컨트롤을 캡슐화합니다.
win7 테마: office2013 테마:
office2016 테마:
office2021 테마:
어두운 테마:
MIT 프로토콜, 누구나 사용하고 의견을 제시할 수 있습니다.
gitee - https://gitee.com/czyt1988/SARibbon
깃허브 - https://github.com/czyt1988/SARibbon
SARibbon
qmake 및 cmake 빌드 방법을 모두 제공하고 단일 프로젝트에 정적 임베딩을 위한 통합 SARibbon.h
및 SARibbon.cpp
파일을 제공합니다.
SARibbon
타사 라이브러리 QWindowKit을 지원하는 동시에 간단한 프레임리스 솔루션도 지원합니다. Windows 7 이후 가장자리 다듬기 및 Windows 11에서 버튼의 호버링 효과 최대화와 같은 운영 체제에 대한 기본 창 지원이 필요한 경우 QWindowKit 라이브러리를 활성화하는 것이 좋습니다. QWindowKit 라이브러리는 다중 화면 이동 문제를 더 잘 해결할 수 있습니다.
QWindowKit 라이브러리에 의존하려면 먼저 QWindowKit 라이브러리를 컴파일해야 합니다. QWindowKit SARibbon 프로젝트의 하위 모듈로 '-- recursive' 매개변수가 'git clone'에 포함되지 않은 경우 'submodules update' 명령 실행해야 합니다:
git submodule update --init --recursive
자세한 빌드 프로세스는 Building SARibbon 문서를 참조하세요.
SARibbon은 결합된 SARibbon.h
파일과 SARibbon.cpp
파일을 제공합니다. 이 두 파일을 자신의 프로젝트에서 가져오기만 하면 되며 동시에 사용할 리소스 파일과 타사 라이브러리 파일을 가져오면 됩니다. 동적 라이브러리로 컴파일할 필요가 없습니다. 또는 정적 라이브러리의 경우 StaticExample 예제( src/example/StaticExample
에 있음)를 참조할 수 있으며 정적 임베딩은 SARibbon.h
에 사용됩니다. SARibbon.cpp
, SARibbon.pri
, SARibbonBar/resource.qrc
및 SARibbonBar/3rdparty
, SARibbonBar/resource
두 폴더:
프로젝트 디렉터리는 다음과 같습니다.
|-you-project-dir
| |-you-project.pro
| |-SARibbon.h
| |-SARibbon.cpp
| |-SARibbon.pri
| |-SARibbonBar
| |-resource.qrc
| |-resource(Directly copy the resource under SARibbonBar in its entirety)
| |-resource files
qmake로 컴파일하려면 다음 단계를 따르세요.
SARibbon.h
, SARibbon.cpp
, SARibbon.pri
프로젝트 디렉터리에 복사하세요.SARibbonBar
폴더를 만듭니다.src/SARibbonBar/resource.qrc
파일을 프로젝트 디렉터리의 SARibbonBar
폴더에 복사합니다.src/SARibbonBar
아래의 resource
폴더를 프로젝트 디렉터리의 SARibbonBar
폴더에 복사합니다.SARibbon.pri
파일을 프로젝트의 pro 파일로 가져옵니다(예: include($$PWD/SARibbon.pri)
cmake를 사용하는 경우 StaticExample 예제( src/example/StaticExample
에 있음)의 cmake 작성 방법을 참조하세요.
컴파일이 완료되면 다음과 같이 SARibbon을 가져옵니다.
qmake를 사용하는 경우 컴파일이 완료된 후 다음 파일을 디렉터리 구조의 프로젝트에 복사하면 됩니다.
먼저 프로젝트에 3rdparty 폴더를 생성한 다음 전체 SARibbon 폴더를 복사합니다. SARibbon에는 프로젝트를 자신의 디렉터리로 쉽게 가져올 수 있는 여러 pri 파일이 이미 있으며 ./importSARibbonBarLib.pri
파일은 다음 작업에 사용됩니다. SARibbon 라이브러리 가져오기
항소 절차를 완료한 후 Qt 프로젝트 프로 파일에 다음 설명을 추가할 수 있습니다.
include( $$ PWD/3rdparty/SARibbon/importSARibbonBarLib.pri)
qmake의 컴파일 프로세스는 SARibbon 아래에 bin_qtx.x_xx 폴더를 생성하고 라이브러리 파일과 dll 파일은 이 폴더에 있으며 importSARibbonBarLib.pri
자동으로 이 폴더의 라이브러리를 참조합니다.
이 시점에서 프로젝트 디렉터리는 다음과 같습니다.
|-[you-project-dir]
| |-you-project.pro
| |-[3rdparty]
| |-[SARibbon](Copy SARibbon in its entirety)
| |-importSARibbonBarLib.pri
| |-SARibbonBar.pri
| |-common.pri
| |-[bin_qtx.x.x_{MSVC/GNU}_x{32/64}]
| |-[src]
| | |-[SARibbonBar]
이 라이브러리는 install
실행 후 사용을 권장합니다.
cmake 도입 방법:
find_package (SARibbonBar REQUIRED)
...
target_link_libraries ({your_target_name} PUBLIC SARibbonBar::SARibbonBar)
find_package
SARibbonBar
찾을 수 없는 경우 cmake 프로젝트에 SARibbon
설치 위치를 알려야 합니다.
set(SARibbonBar_DIR "[your SARibbonBar installation root directory]/lib/cmake")
컴파일 중에 SARIBBON_INSTALL_IN_CURRENT_DIR
옵션이 ON
(기본값)으로 설정되면 SARibbon 프로젝트의 루트 디렉터리 아래에 bin_qt{Qt version}_{MSVC/GNU}_x{32/64}
폴더가 설치 디렉터리로 생성됩니다. 이는 qmake와 일치하고 단일 운영 체제에 여러 버전의 Qt 및 컴파일러 설치를 용이하게 하기 위한 것입니다. 그렇지 않으면 Windows에서는 기본적으로 C:Program FilesSARibbonBar
폴더에 설치됩니다.
cmake를 통해 SARibbon을 도입하는 방법에 대한 참조는 src/example/MainWindowExample/CMakeLists.txt
참조하세요.
자세한 내용은 SARibbon Building 문서를 참조하세요.
리본은 메뉴 표시줄과 도구 모음의 조합이며 탭 컨트롤을 통해 표시됩니다. 리본은 단순히 Tab+Toolbar로 대체할 수 없으며 많은 세부 사항이 포함됩니다. SARibbon
디자인에서 MFC 리본 인터페이스의 명명 스타일을 나타냅니다. , 탭 페이지는 Category
라고 하며 각 Category
아래에는 도구 버튼을 관리하는 여러 개의 pannel
이 있습니다. pannel
아래 이미지에 표시된 계층 구조를 갖춘 전통적인 Toolbar
와 약간 비슷하며 이러한 이름은 MFC 리본을 참조합니다. 인터페이스 클래스
일부 일반 명사는 아래에 설명되어 있습니다.
SARibbonCategory
에 해당하는 라벨이 나타내는 내용을 나타내는 Category .
컨텍스트 카테고리 , 이것은 특별한 카테고리입니다. 정상적으로 표시되지 않습니다. 문맥에 따라 표시할지 여부를 판단해야 합니다. 가장 일반적인 방법은 워드에 그림을 삽입한 후 그림 수정과 관련된 라벨이 나타나는 것입니다. 사진을 선택하지 않으면 라벨이 사라집니다. 이는 SARibbonContextCategory
에 해당하는 컨텍스트 카테고리입니다.
Pannel , SARibbonPannel
에 해당하는 도구 모음과 같은 메뉴 모음입니다.
응용 프로그램 버튼 , 탭 표시줄의 가장 왼쪽 버튼입니다(word는 해당 파일 버튼입니다). 이 버튼은 숨길 수 있는 SARibbonApplicationButton
에 해당하는 일부 특수 페이지나 메뉴를 트리거합니다.
Quick Access Bar 는 SARibbonQuickAccessBar
에 해당하는 일반적인 작업을 배치하기 위한 상단의 간단한 도구 모음입니다.
갤러리 컨트롤 , 가장 눈길을 끄는 리본 컨트롤입니다. 직관적인 이미지로 기능을 표시하고, 심지어 일부 렌더링도 상황에 따라 실시간으로 이루어집니다. 전형적인 예는 사무실 단어의 스타일 선택입니다. SARibbonGallery
에 해당합니다.
SARibbonBar의 레이아웃은 아래 그림에 나와 있습니다.
참고: 다양한 레이아웃 구성표는
Category
및Quick Access Bar
의 배치에 영향을 미칩니다.
MainWindow에서 SARibbon을 사용하려면 QMainWindow
SARibbonMainWindow
로 교체해야 합니다. 이는 QMainWindow
메뉴 표시줄을 렌더링하는 방식을 수정합니다.
UI 파일을 사용하는 경우 UI 파일의 메뉴를 삭제해야 합니다. 그렇지 않으면 일부 예외가 발생할 수 있습니다.
샘플 코드는 다음과 같습니다.
# include " SARibbonMainWindow.h "
class MainWindow : public SARibbonMainWindow
{
Q_OBJECT
public:
MainWindow (QWidget* par = nullptr );
...
}
SARibbonMainWindow
다음 생성자를 사용하여 일반 모드 렌더링도 지원합니다.
SARibbonMainWindow (QWidget *parent = nullptr , bool useRibbon = true );
두 번째 매개변수가 false로 설정되면 일반 메뉴 도구 모음 모드가 사용됩니다. 이 인터페이스는 리본과 클래식 메뉴 도구 모음 장면 사이를 전환할 수 있어야 하는 일부 프로젝트용으로 예약되어 있으며, 리본 상태와 클래식 상태는 핫 전환을 지원하지 않습니다. , 전환이 필요한 경우 구성 파일이나 레지스트리를 설정하고 애플리케이션이 다시 시작될 때 두 번째 매개변수에 false를 전달하여 클래식 메뉴 도구 모음 모드로 들어갈 수 있습니다.
SARibbonBar
QWidget
또는 QDialog
에서 사용할 수 있습니다. 예를 참조하세요. src/example/WidgetWithRibbon
당신이 해야 할 일은 SARibbonBar
일반 위젯으로 사용하는 것뿐입니다.
먼저 헤더 파일에 SARibbonBar
의 포인터를 선언합니다.
private:
Ui::Widget* ui;
SARibbonBar* mRibbonBar { nullptr };
위젯 생성자에서 SARibbonBar
생성하고 위젯의 ui 파일에 QVBoxLayout
레이아웃이 있으며 SARibbonBar
맨 위에 배치하고 동시에 QWidget 모드이므로 제목을 표시할 필요가 없으므로 다음을 호출할 수 있습니다. 제목을 숨기려면 SARibbonBar::setTitleVisible
메소드를 사용하세요. 필요하지 않은 경우 SARibbonBar::setApplicationButton
통해 QWidget에서 applicationbutton을 취소할 수도 있으며, 마지막으로 SARibbonBar의 테마가 SARibbonMainWindow
메서드에 설정되었으므로 전역 함수 sa_set_ribbon_ theme
통해 QWidget에서 테마를 설정할 수 있습니다.
# include " SARibbonBar.h "
# include " SARibbonCategory.h "
# include " SARibbonPannel.h "
# include " SARibbonMainWindow.h "
Widget::Widget (QWidget* parent) : QWidget(parent), ui( new Ui::Widget)
{
// Note: There is a QVBoxLayout layout in the ui file
ui-> setupUi ( this );
// Create SARibbonBar
mRibbonBar = new SARibbonBar ( this );
// there is no need to display the title anymore on QWidget
mRibbonBar -> setTitleVisible ( false );
// it is better to use compact mode directly on QWidget
mRibbonBar -> setRibbonStyle (SARibbonBar::RibbonStyleCompactThreeRow);
// cancel applicationbutton
mRibbonBar -> setApplicationButton ( nullptr );
// Set the theme, although SARibbonMainWindow is not used here,
// but the theme of the Ribbon is defined in SARibbonMainWindow, so SARibbonMainWindow.h should be introduced
sa_set_ribbon_theme ( mRibbonBar , SARibbonMainWindow::RibbonThemeOffice2013);
// QWidgets sets a QVBoxLayout and puts the window in the second layout of the QVBoxLayout,
// and the first layout is given to SARibbonBar, so that SARibbonBar will be on top
ui-> verticalLayout -> insertWidget ( 0 , mRibbonBar );
buildRibbon ( mRibbonBar );
}
그 모습은 다음과 같습니다.
리본을 만드는 순서는 카테고리를 만든 다음 패널을 만들고 마지막으로 도구 버튼(작업)을 만드는 것입니다.
SARibbonBar::addCategoryPage
사용하여 SARibbonBar에 카테고리를 추가하고, SARibbonCategory::addPannel
사용하여 카테고리를 추가하고, SARibbonPannel::addAction
사용하여 패널에 작업을 추가합니다.
다음 코드는 작업을 추가하는 예를 보여줍니다.
// Add main tab - The main tab is added through the addcategorypage factory function.
SARibbonCategory* categoryMain = ribbon-> addCategoryPage (tr( " Main " ));
// Using the addpannel function to create saribponpannel. The effect is the same as that of new saribponpannel, and then call SARibbonCategory:: 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
에서 직접 새로 작성하여 패널에 추가할 수도 있으며 다음 코드는 위와 동일하게 보입니다.
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);
addLargeAction
, addMediumAction
, addSmallAction
통해 다양한 레이아웃 스타일을 결합할 수 있습니다. 자세한 내용은 다음을 참조하세요.
./src/example/MainWindowExample/mainwindow.cpp
소위 컨텍스트 카테고리는 특별한 상황에서만 나타나는 레이블/레이블 그룹을 말합니다. 예를 들어, 사무실 단어가 사진을 선택하면 다음 그림과 같이 사진 편집의 컨텍스트 범주가 나타납니다.
SARibbon의 컨텍스트 카테고리에 해당하는 클래스는 SARibbonContextCategory
입니다.
컨텍스트 카테고리는 일반적으로 프로그램이 초기화될 때 생성됩니다. 일반적으로 숨겨져 있으며 표시해야 할 때 표시됩니다. 컨텍스트 범주는 다음과 같이 생성됩니다.
Context Category는 사용시 호출되어야 하므로 멤버변수와 함께 저장하는 것이 좋다. 물론 검색을 순회할 수도 있습니다( SARibbonBar::contextCategoryList
모든 SARibbonContextCategory
열거할 수 있음).
헤더 파일:
SARibbonContextCategory* m_contextCategory;
cpp 파일:
SARibbonBar* ribbon = ribbonBar();
// Create a contextCategory with random colors
m_contextCategory = ribbon-> addContextCategory (tr( " context " ), QColor());
SARibbonCategory* contextCategoryPage1 = m_contextCategory-> addCategoryPage (tr( " Page1 " ));
// Operate on contextCategoryPage1
......
SARibbonCategory* contextCategoryPage2 = m_contextCategory-> addCategoryPage (tr( " Page2 " ));
// Operate on contextCategoryPage2
......
SARibbonContextCategory
에 의해 생성된 SARibbonCategory
SARibbonContextCategory
에 의해 관리됩니다. SARibbonContextCategory
표시되는 경우에만 관리형 SARibbonCategory
표시됩니다.
참고: 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의 포인터를 삭제할 필요가 없습니다.
contextCategory마다 스타일이 다릅니다. 자세한 내용은 [SARibbon 스타일](#SARibbon 스타일) 및 [다른 스타일에서 비교 표시](#다른 스타일에서 비교 표시)를 참조하세요.
리본 인터페이스의 왼쪽 상단에는 ApplicationButton
이라는 특별하고 명확한 버튼이 있습니다. 이 버튼은 일반적으로 메뉴를 불러올 때 사용됩니다. SARibbonBar는 생성 중에 기본적으로 ApplicationButton
생성합니다. 해당 텍스트는 다음과 같은 방법으로 설정할 수 있습니다.
SARibbonBar* ribbon = ribbonBar();
ribbon-> applicationButton ()->setText(( " File " ));
기본 applicationButton은 SARibbonApplicationButton
에서 상속되고 SARibbonApplicationButton
QPushButton
에서 상속되므로 QPushButton
에서 모든 작업을 수행할 수 있습니다. 물론 자신만의 Button을 applicationButton으로 설정하려면 SARibbonBar::setApplicationButton
함수를 호출하면 됩니다.
QuickAccessBar는 왼쪽 상단에 있는 빠른 도구 모음이고 rightButtonGroup은 오른쪽 상단에 있는 빠른 도구 모음입니다. 오피스 모드에서는 왼쪽과 오른쪽으로 나누어져 있습니다. WPS 모드에서는 왼쪽과 오른쪽이 합쳐져 오른쪽에 배치됩니다.
SARibbon
에서 :
SARibbonQuickAccessBar
클래스에 해당합니다.SARibbonQuickAccessBar
클래스에 해당합니다. 초기화 중에 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
모드는 가장 일반적인 리본 모드로, tab
과 제목 표시줄이 더 많은 공간을 차지하며, WPS
에서 디자인한 리본 모드가 개선되어 리본 높이가 줄어들고, 라벨과 제목 표시줄이 함께 설정됩니다. 타이틀바의 높이를 줄여 수직 공간을 효과적으로 활용하는 동시에 패널의 버튼 레이아웃을 최대 3개에서 2개로 변경해 수직 공간을 더욱 압축했습니다.
Office의 워드 인터페이스와 WPS의 워드 인터페이스 스크린샷 비교
일반 화면에서 WPS 스타일은 Office 스타일에 비해 세로 높이를 최소 30픽셀 줄여줍니다. 이는 1920*1080 화면에 비해 세로 공간을 약 3% 절약하는 것과 같습니다.
SARibbon에서는 제목 표시줄이 있는 것을 Loose라고 하며 느슨한 레이아웃의 요소는 다음과 같이 배열됩니다.
이 레이아웃은 Office의 기본 레이아웃과 일치합니다.
SARibbon에서는 제목 표시줄과 탭이 있는 레이아웃을 컴팩트 레이아웃이라고 하며 컴팩트 레이아웃의 요소는 다음과 같이 배열됩니다.
SARibbonBar는 현재 레이아웃 스타일을 정의하는 setRibbonStyle
함수를 제공하고 SARibbonBar::RibbonStyle
열거하면 네 가지 레이아웃 구성표가 정의됩니다.
SARibbonBar::RibbonStyleLooseThreeRow
3줄 느슨함(v0.x 버전은 SARibbonBar::OfficeStyle
입니다) SARibbonBar::RibbonStyleLooseTwoRow
2줄 느슨함(v0.x 버전은 SARibbonBar::OfficeStyleTwoRow
입니다) SARibbonBar::RibbonStyleCompactThreeRow
3행 컴팩트(v0.x 버전은 SARibbonBar::WpsLiteStyle
입니다) SARibbonBar::RibbonStyleCompactTwoRow
2행 컴팩트(v0.x 버전은 SARibbonBar::WpsLiteStyleTwoRow
입니다) SARibbonBar::setEnableWordWrap
함수를 사용하면 SARibbonBar의 텍스트 줄바꿈 여부, SARibbonBar
의 높이 고정 여부, 텍스트 줄바꿈 여부가 아이콘 표시 크기에 영향을 미칠지 여부를 제어할 수 있으므로 아이콘을 원하는 경우 더 크게 보려면 텍스트를 줄바꿈하지 않도록 설정할 수 있습니다.
SARibbonBar::RibbonStyleCompactTwoRow
레이아웃 스타일에서 줄 바꿈이 없는 텍스트는 다음과 같이 표시됩니다.
SARibbonBar::RibbonStyleCompactTwoRow
紧凑结构,2行模式把文字设置为不换行后( SARibbonBar::setEnableWordWrap(false)
) 的效果如下
SARibbonBar 텍스트를 줄 바꿈하지 않음으로 설정하면 아이콘의 표시 공간이 더 커집니다.
SARibbonPannel
작업을 추가하는 세 가지 방법을 제공합니다.
addLargeAction
addMediumAction
addSmallAction
표준 패널에서 작업(버튼)에는 세 가지 레이아웃 모드가 있습니다. 예를 들어 사무실 단어를 사용하면 패널의 세 가지 레이아웃은 실제로 차지하는 라인 수입니다.
SARibbonPannelItem::RowProportion
패널에서 각 양식이 차지하는 행 수를 나타내는 데 사용됩니다. 일반적으로 패널 레이아웃에 사용됩니다. 이 열거형은 다음과 같이 정의됩니다.
/* *
* @brief defines the proportion of rows. The ribbon has three proportions: large, media and small.
*/
enum RowProportion {
None // /< to define the proportion, it will be judged according to expandingDirections. If Qt::Vertical is available, it is equal to Large, otherwise it is Small
, Large // /< Large proportion, the height of a widget will fill the whole pannel.
, Medium // /< Medium proportion will only work when @ref SARibbonPannel::pannelLayoutMode is @ref SARibbonPannel::ThreeRowMode, and will occupy two of the three rows if both of them in the same column are Medium.
, Small // /< Small proportion, in the line of SARibbonPannel, Medium will become Small if it does not meet the conditions, but will not become Large.
};
SARibbonPannel
에서 관리되는 각 작업에는 개인 속성( SARibbonPannelItem::RowProportion
)이 있습니다. 이 속성은 패널에서 이 작업의 레이아웃을 결정합니다.
SARibbonPannel
레이아웃 모드 3줄 모드는 다음 그림과 같이 전통적인 패널 레이아웃입니다.
3줄 모드에는 대, 중, 소 세 가지 종류의 자리 표시자가 있습니다.
3줄 모드의 패널은 패널 제목 영역에 패널 제목이 표시되며, 또 다른 OptionAction 영역이 있습니다. 이 영역은 이 작업에 특수 트리거를 추가하는 데 사용됩니다. OptionAction이 설정되지 않은 경우 이 영역은 숨겨집니다.
두 줄 모드는 다음 그림과 같이 WPS 개선된 레이아웃 방법입니다.
2줄 모드에서는 중간 및 작은 자리 표시자(SARibbonPannelItem::RowProportion)가 동일하며 구별이 이루어지지 않습니다.
2줄 모드에서는 패널에 제목이 표시되지 않습니다.
리본 사용자 정의는 리본의 기능입니다. Office 및 WPS의 사용자 정의 인터페이스를 참조하여 사용자는 자신의 리본에 대한 많은 콘텐츠를 정의하거나 원본과 완전히 다른 인터페이스를 정의할 수도 있습니다.
다음은 Office의 사용자 정의 인터페이스입니다.
SARibbon은 사무실과 WPS의 인터페이스를 나타내며 다음 5개 클래스를 포함하여 사용하기 쉬운 SARibbonCustomize**
클래스를 캡슐화합니다.
SARibbonCustomizeDialog
SARibbonCustomizeWidget
SARibbonCustomizeData
SARibbonActionsManager
SARibbonActionsManagerModel
실제 사용자는 SARibbonActionsManager
및 SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
만 사용할 수 있으며, 다른 사용자는 정상적으로 사용하지 않습니다.
SARibbonActionsManager
는 QAction
관리하고, 사용자 정의하려는 QAction
SARibbonActionsManager
에 추가하여 관리하며, QAction
SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
에 표시할 수 있도록 분류하는 데 사용됩니다.
SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
은 특정 표시 창입니다. SARibbonCustomizeDialog
SARibbonCustomizeWidget
을 대화 상자로 캡슐화합니다. 사무실과 같은 구성 대화 상자에 통합하려면 SARibbonCustomizeWidget
을 사용할 수 있습니다. SARibbonCustomizeDialog
의 효과는 다음 그림에 표시되어 있습니다.
사용자 정의 기능을 추가하는 방법은 다음과 같습니다.
먼저 SARibbonActionsManager
MainWindow
의 멤버 변수로 정의합니다.
// Define member variables in the MainWindow.h.
SARibbonActionsManager* m_ribbonActionMgr; // /< Manage all actions
MainWindow
초기화 중에 많은 수의 QAction
생성해야 합니다. QAction
의 상위 객체는 MainWindow
로 지정됩니다. 또한 카테고리 추가, 패널 추가 및 기타 작업과 같은 리본 레이아웃이 생성됩니다. 위 작업이 완료된 후 다음 단계를 추가하여 SARibbonActionsManager
모든 QAction
자동으로 관리하도록 합니다.
// Initialization of MainWindow and generation of QAction.
// Generate ribbon layout.
m_ribbonActionMgr = new SARibbonActionsManager(mainWinowPtr);
m_ribbonActionMgr-> autoRegisteActions (mainWinowPtr);
SARibbonActionsManager
의 주요 기능인 autoRegisteActions
SARibbonMainWindow
아래의 모든 하위 객체를 탐색하고 작업을 찾아 등록하며 모든 SARibbonCategory
탐색할 수 있습니다. SARibbonCategory
아래의 작업은 SARibbonCategory
의 제목 이름에 따라 분류됩니다. 이 함수는 또한 SARibbonMainWindow
아래에 작업을 등록하지만 어떤 카테고리에도 등록하지 않습니다('NotInRibbonCategoryTag' 태그). 기본 이름은 '리본에 없음'입니다.
SARibbonCustomizeDialog를 호출하려면 다음과 같이 하세요.
QString cfgpath = " customization.xml " ;
SARibbonCustomizeDialog dlg ( this , this );
dlg.setupActionsManager(m_ribbonActionMgr);
dlg.fromXml(cfgpath); // This step is called to load the existing custom steps, which can be added based on the original custom steps when saving.
if (QDialog::Accepted == dlg.exec()) {
dlg. applys (); // Apply custom steps
dlg. toXml (cfgpath); // Save custom steps to a file
}
MainWindow가 생성되기 전에 사용자 정의된 컨텐츠를 로드해야 합니다. 따라서 생성자에 다음 명령문을 추가해야 합니다.
// Constructor of MainWindow
sa_apply_customize_from_xml_file ( " customization.xml " , this , m_ribbonActionMgr);
sa_apply_customize_from_xml_file
은 SARibbonCustomizeWidget.h
에서 제공되는 함수입니다. 구성 파일에서 사용자 정의한 내용은 MainWindow에 바로 적용됩니다.
이런 방식으로 소프트웨어는 시작될 때마다 구성 파일에 따라 로드됩니다.
github - https://github.com/czyt1988/data-workbench
gitee - https://gitee.com/czyt1988/data-workbench
특정 리본 생성 코드는 다음과 같습니다.
https://github.com/czyt1988/data-workbench/blob/master/src/APP/DAAppRibbonArea.cpp
높은 DPI 화면 표시 문제에 대비하는 방법에는 두 가지가 있습니다.
QApplication
에 대해 Qt::AA_EnableHighDpiScaling
설정합니다.이 속성을 사용하면 애플리케이션이 디스플레이의 픽셀 밀도를 자동으로 감지하여 다음과 같은 자동 크기 조정을 달성할 수 있습니다.
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);
......
}
QApplication
에 대한 스케일링 정책을 설정합니다: QApplication::setHighDpiScaleFactorRoundingPolicy
Qt5.6은 Qt::AA_EnableHighDpiScaling
제공하지만 높은 DPI 화면 문제를 완전히 해결할 수는 없습니다. Qt5.14는 QApplication::setHighDpiScaleFactorRoundingPolicy
라는 높은 dpi 화면 크기 조정 정책 설정을 제공했으며, 또한 기본 함수에서 설정해야 합니다. 예를 들면 다음과 같습니다.
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
# if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
QApplication::setHighDpiScaleFactorRoundingPolicy (Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
# endif
QApplication a (argc, argv);
......
}
SARibbonBar를 사용한 후 비활성 탭 페이지의 단축키가 반응하지 않고, 활성화된 탭 페이지의 단축키만 반응한다는 피드백을 받는 경우가 많습니다. 기존 도구 모음 모드인 경우 작업이 있는 도구 모음이 항상 맨 앞에 있으므로 바로 가기 키가 계속 유효합니다. 단, SARibbonBar인 경우 액션 패널의 단축키가 숨겨지며, 숨긴 후에는 적용되지 않습니다. 패널 숨김 여부에 관계없이 단축키가 적용되도록 하려면 단축키의 ' Qt::ApplicationShortcut
에 대한shortcutContext'속성도 유효하지 않습니다. 이 경우 카테고리를 생성한 위치에 수동으로 단축키를 생성하면 됩니다.
예:
ribbon build
...
QShortcut* shortCut = new QShortcut(QKeySequence(QLatin1String( " Ctrl+S " )), this );
connect (shortCut, &QShortcut::activated, this , [ actSave ]() {
actSave-> trigger ();
});