中文档点击这里,QQ群:434014314
| Windows(2019、最新) | Linux ubuntu(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 |
これはQtフレームワークのRibbon controlであり、Microsoft Office ソフトウェアと同様のインターフェイスを提供します。 SARibbonは、大規模なソフトウェア、産業用ソフトウェア、および複雑なソフトウェア UI に適しています。 SARibbonは MFC リボン インターフェイスの命名スタイルを参照して設計されており、 SARibbonのインターフェイス スタイルは Microsoft Office シリーズ ソフトウェアと WPS ソフトウェアのリボン インターフェイスを参照し、両方の利点を組み合わせています。 SARibbon 、さまざまなテーマ スタイルを定義できるリボン ウィジェットであり、qss を通じて希望のテーマ スタイルをすばやく定義できます。大規模なソフトウェアの開発を容易にするために、 SARibbon 、カラー ウィジェットなどの一般的に使用されるいくつかの機能コントロールをカプセル化します。





win7のテーマ:
office2013のテーマ:
office2016 テーマ:
office2021テーマ:
ダークテーマ: 



MITプロトコル、誰でも使用してコメントすることを歓迎します
gitee - https://gitee.com/czyt1988/SARibbon
github - 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詳細なビルド プロセスについては、ドキュメント「SARibbon のビルド」を参照してください。
SARibbon は、 SARibbon.hファイルとSARibbon.cppファイルを組み合わせたものを提供します。これら 2 つのファイルを独自のプロジェクトにインポートするだけでよく、同時に使用するリソース ファイルとサードパーティのライブラリ ファイルをインポートするだけで済みます。動的ライブラリにコンパイルする必要はありません。または静的ライブラリの場合は、 StaticExample の例 ( src/example/StaticExampleにあります) を参照できます。 SARibbon.hには静的埋め込みが使用されます。 SARibbon.cpp 、 SARibbon.pri 、 SARibbonBar/resource.qrc 、およびSARibbonBar/3rdparty 、 SARibbonBar/resource 2 つのフォルダー:
プロジェクト ディレクトリは次のようになります。
|-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 importSARibbonBarLib.pri ファイルは次の目的で使用されます。 SARibbon ライブラリをインポートする
異議申し立てプロセスが完了したら、次のステートメントを Qt プロジェクトの pro ファイルに追加できます。
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 (デフォルト) に設定されている場合、 bin_qt{Qt version}_{MSVC/GNU}_x{32/64}フォルダーが SARibbon プロジェクトのルート ディレクトリの下にインストール ディレクトリとして生成されます。これは、qmake と連携し、単一のオペレーティング システム上での複数の異なるバージョンの Qt およびコンパイラのインストールを容易にするためです。それ以外の場合、Windows では、デフォルトでC:Program FilesSARibbonBarフォルダーにインストールされます。
cmake を介した SARibbon の導入に関するリファレンスについては、 src/example/MainWindowExample/CMakeLists.txtを参照してください。
詳細については、ドキュメントを参照してください: SARibbon Building
リボンはメニュー バーとツールバーの組み合わせであり、タブ コントロールを通じて表示されます。リボンは単にタブ + ツールバーに置き換えることはできず、詳細が多く含まれます。SARibbon SARibbonデザインにおける MFC リボン インターフェイスの命名スタイルを指します。 、タブ ページはCategoryと呼ばれ、各Categoryの下に複数のpannelがあり、その下でツールボタンを管理します。 pannel従来のToolbarに少し似ており、下の画像に示すような階層があり、これらの名前はMFC リボン インターフェイス クラス

いくつかの一般名詞については以下で説明します
カテゴリ: ラベルが示す内容を表し、 SARibbonCategoryに対応します。
コンテキスト カテゴリ、これは特別なカテゴリです。正常に表示されません。コンテキストに基づいて表示するかどうかを判断する必要があります。最も一般的な方法は、Word に画像を挿入した後、画像の変更に関連するラベルが表示されることです。画像が選択されていない場合、ラベルは表示されません。これはコンテキスト カテゴリであり、 SARibbonContextCategoryに対応します。
Pannel 、これはSARibbonPannelに対応する、ツールバーのようなメニューのコレクションです。
アプリケーション ボタン、これはタブ バーの一番左のボタンです (Word は対応するファイル ボタンです)。このボタンは、 SARibbonApplicationButtonに対応する、非表示にすることができるいくつかの特別なページまたはメニューをトリガーします。
クイック アクセス バーSARibbonQuickAccessBarに対応する一般的なアクションを配置するための上部のシンプルなツールバー。
ギャラリー コントロール、これはリボンの最も目を引くコントロールです。直感的なイメージで機能が表示され、一部のレンダリングもコンテキストに応じてリアルタイムで実行されます。典型的な例は、Office Word でのスタイル選択です。 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 );2 番目のパラメーターが false に設定されている場合、通常のメニュー ツールバー モードが使用されます。このインターフェイスは、リボンとクラシック メニュー ツールバー シーンを切り替える必要がある一部のプロジェクト用に予約されています。リボン状態とクラシック状態はホット スイッチをサポートしていません。切り替える必要がある場合は、構成ファイルまたはレジストリを設定し、アプリケーションの再起動時に 2 番目のパラメータに false を渡してクラシック メニュー ツールバー モードに切り替えることができます。
SARibbonBar QWidgetまたはQDialogで使用できます。例を参照してください: src/example/WidgetWithRibbon
SARibbonBar通常のウィジェットとして使用するだけです
まずヘッダファイル内でSARibbonBarのポインタを宣言します。
private:
Ui::Widget* ui;
SARibbonBar* mRibbonBar { nullptr };ウィジェットのコンストラクターでSARibbonBar作成します。ウィジェットの ui ファイルにはQVBoxLayoutレイアウトがあり、 SARibbonBar一番上に配置します。同時に、QWidget モードなのでタイトルを表示する必要はなく、呼び出すことができます。 SARibbonBar::setTitleVisibleメソッドを使用してタイトルを非表示にします。 applicationbutton は、必要がなければSARibbonBar::setApplicationButton介して QWidget でキャンセルすることもできます。最後に、SARibbonBar のテーマはSARibbonMainWindowメソッドで設定されているため、テーマはグローバル関数sa_set_ribbon_ theme
# 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使用してアクションを Pannel に追加します。
次のコードは、アクションを追加する例を示しています。
// 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
いわゆるコンテキスト カテゴリは、特別な状況下でのみ表示されるラベル/ラベル グループを指します。たとえば、Office Word で画像を選択すると、次の図に示すように、画像編集のコンテキスト カテゴリが表示されます。

SARibbon のコンテキスト カテゴリに対応するクラスはSARibbonContextCategoryです。
コンテキスト カテゴリは通常、プログラムの初期化時に作成されます。通常は非表示になっており、表示する必要がある場合には表示されます。コンテキスト カテゴリは次のように作成されます。
コンテキスト カテゴリは使用時に呼び出す必要があるため、メンバー変数とともに保存することをお勧めします。もちろん、検索を横断することもできます ( 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ですべての操作を実行できます。もちろん、独自のボタンを 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 4 つのリボン スタイル間の切り替えをサポートしています。ここではofficeとWPSのリボンスタイルを参照しています。オンライン スタイルの切り替えはvoid SARibbonBar::setRibbonStyle(RibbonStyle v)によって実現できます。
officeモードは最も一般的なリボン モードで、 tabとタイトル バーがより多くのスペースを占めます。WPS によって設計されたリボンWPSが改良され、リボンの高さが低くなり、ラベルとタイトル バーが一緒に設定されるため、タイトルバーの高さを低くし、縦方向のスペースを有効活用すると同時に、パネルのボタン配置を最大3個から2個に変更し、縦方向のスペースをさらに圧縮します。
officeのワードインターフェースとWPSのワードインターフェースのスクリーンショット比較


通常の画面では、WPS スタイルは Office スタイルと比較して垂直方向の高さを少なくとも 30 ピクセル削減します。これは、1920*1080 画面と比較して垂直方向のスペースを 3% 近く節約することに相当します。
SARibbonではタイトルバーのあるものをLooseと呼び、Looseレイアウトの要素は以下のように配置されています。

このレイアウトは、Office のデフォルトのレイアウトと一致しています。
SARibbon では、タイトル バーとタブを備えたレイアウトをコンパクト レイアウトと呼び、コンパクト レイアウトの要素は次のように配置されます。

SARibbonBar は、現在のレイアウト スタイルを定義するsetRibbonStyle関数を提供し、 SARibbonBar::RibbonStyle列挙することで 4 つのレイアウト スキームを定義します。
SARibbonBar::RibbonStyleLooseThreeRow 3 列のルース (v0.x バージョンはSARibbonBar::OfficeStyleです) 
SARibbonBar::RibbonStyleLooseTwoRow Loose With Two Row (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アクションを追加するための 3 つのメソッドが用意されています。
addLargeActionaddMediumActionaddSmallAction標準パネルでは、アクション (ボタン) に 3 つのレイアウト モードがあります。 office word を例にとると、パネルの 3 つのレイアウトは実際に占有される行数です。

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 種類のプレースホルダーがあります。
3 行モードのパネルでは、パネルのタイトルが [パネル タイトル] 領域に表示され、別の [OptionAction] 領域があります。この領域は、このアクションに特別なトリガーを追加するために使用されます。 OptionAction が設定されていない場合、この領域は非表示になります。
次の図に示すように、2 行モードは WPS の改良されたレイアウト方法です。

2 行モードでは、中と小のプレースホルダー (SARibbonPannelItem::RowProportion) は同じであり、区別されません。
2 行モードでは、パネルにタイトルが表示されません。
リボンのカスタマイズはリボンの機能です。オフィスと WPS のカスタム インターフェイスを参照して、ユーザーは独自のリボンの多くのコンテンツを定義したり、元のインターフェイスとはまったく異なるインターフェイスを定義したりすることもできます。
以下はofficeのカスタムインターフェースです。

SARibbon は、オフィスと WPS のインターフェイスを指し、次の 5 つのクラスを含む、使いやすいSARibbonCustomize**クラスをカプセル化します。
SARibbonCustomizeDialogSARibbonCustomizeWidgetSARibbonCustomizeDataSARibbonActionsManagerSARibbonActionsManagerModel
実際のユーザーはSARibbonActionsManagerとSARibbonCustomizeDialog / SARibbonCustomizeWidgetのみを使用でき、他のユーザーは通常これらを使用しません。
SARibbonActionsManagerは、 QAction管理し、カスタマイズしたいQAction SARibbonActionsManagerに追加して管理し、 SARibbonCustomizeDialog / SARibbonCustomizeWidgetに表示できるようにQAction分類するために使用されます。
SARibbonCustomizeDialog / SARibbonCustomizeWidgetは、特定の表示ウィンドウです。 SARibbonCustomizeDialogは、 SARibbonCustomizeWidgetダイアログ ボックスとしてカプセル化します。 Office などの構成ダイアログ ボックスに統合する場合は、 SARibbonCustomizeWidget使用できます。 SARibbonCustomizeDialogの効果を次の図に示します。

カスタム機能を追加する方法は次のとおりです。
まず、 MainWindowのメンバー変数としてSARibbonActionsManager定義します。
// 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で提供される関数です。設定ファイルのカスタマイズ内容は、メインウィンドウに直接反映されます。
このようにして、ソフトウェアは起動するたびに設定ファイルに従ってロードされます。


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 画面表示の問題に備えるには 2 つの方法があります。
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 画面スケーリング ポリシー設定が提供されています。これも main 関数で設定する必要があります。次に例を示します。
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 ();
});