中文文档点击这里,QQ群:434014314
Windows (2019, aktuell) | Linux Ubuntu (20.04, aktuell) | Mac (11-neueste Version) | |
---|---|---|---|
Qt5.12 | |||
Qt5.13 | |||
Qt5.14 | |||
Qt5.15 | |||
Qt6.0 | |||
Qt6.1 | |||
Qt6.2 | |||
Qt6.3 | |||
Qt6.4 | |||
Qt6.5 | |||
Qt6.6 |
Dabei handelt es sich um ein Ribbon control
im Qt
-Framework, das eine ähnliche Schnittstelle wie die Microsoft Office-Software bietet. SARibbon
eignet sich für große Software, Industriesoftware und komplexe Software-Benutzeroberflächen. SARibbon
basiert auf dem Namensstil der MFC-Ribbon-Schnittstelle. Der Schnittstellenstil von SARibbon
bezieht sich auf die Ribbon-Schnittstelle der Software der Microsoft Office-Serie und der WPS-Software und kombiniert die Vorteile beider. SARibbon
ist ein Multifunktionsleisten-Widget, das eine Vielzahl von Themenstilen definieren kann und über qss schnell den gewünschten Themenstil definieren kann. Um die Entwicklung großer Software zu erleichtern, kapselt SARibbon
einige häufig verwendete Funktionssteuerelemente, wie z. B. Farb-Widgets
Win7-Thema: Office2013-Thema: Thema office2016: Thema office2021: dunkles Thema:
MIT-Protokoll, jeder kann es verwenden und Kommentare abgeben
Ferienhaus – https://gitee.com/czyt1988/SARibbon
Github – https://github.com/czyt1988/SARibbon
SARibbon
bietet sowohl qmake- als auch cmake-Build-Methoden und stellt eine zusammengeführte SARibbon.h
und SARibbon.cpp
Datei für die statische Einbettung in ein einzelnes Projekt bereit
SARibbon
unterstützt die Drittanbieter-Bibliothek QWindowKit. Gleichzeitig werden auch einfache rahmenlose Lösungen unterstützt. Wenn Sie native Fensterunterstützung für das Betriebssystem benötigen, z. B. Kantenbeschnitt nach Windows 7 und Maximierung des Hovering-Effekts von Schaltflächen in Windows 11, wird empfohlen, die QWindowKit-Bibliothek zu aktivieren. Die QWindowKit-Bibliothek kann das Problem der Bewegung mehrerer Bildschirme besser lösen
Wenn Sie sich auf die QWindowKit-Bibliothek verlassen möchten, müssen Sie zuerst die QWindowKit-Bibliothek und QWindowKit als Submodule des SARibbon-Projekts kompilieren. Wenn der Parameter „--recursive“ nicht im „git clone“ enthalten ist, verwenden Sie den Befehl „submodules update“. muss ausgeführt werden:
git submodule update --init --recursive
Den detaillierten Build-Prozess finden Sie im Dokument: Building SARibbon
SARibbon stellt SARibbon.h
Datei und SARibbon.cpp
-Datei zusammen. Sie müssen nur diese beiden Dateien in Ihr eigenes Projekt importieren und gleichzeitig Ressourcendateien und Bibliotheksdateien von Drittanbietern zur Verwendung importieren, ohne dass eine Kompilierung in dynamische Bibliotheken erforderlich ist oder statische Bibliotheken, Sie können auf das StaticExample-Beispiel verweisen (befindet sich in src/example/StaticExample
). Die statische Einbettung wird für SARibbon.h
verwendet. SARibbon.cpp
, SARibbon.pri
, SARibbonBar/resource.qrc
und SARibbonBar/3rdparty
, SARibbonBar/resource
zwei Ordner:
Ihr Projektverzeichnis sieht folgendermaßen aus:
|-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
Um mit qmake zu kompilieren, können Sie die folgenden Schritte ausführen:
SARibbon.h
, SARibbon.cpp
, SARibbon.pri
in Ihr ProjektverzeichnisSARibbonBar
-Ordner in Ihrem Projektverzeichnissrc/SARibbonBar/resource.qrc
im Quellcode in den Ordner SARibbonBar
in Ihrem Projektverzeichnisresource
unter src/SARibbonBar
in den Ordner SARibbonBar
in Ihrem ProjektverzeichnisSARibbon.pri
in die Profildatei Ihres Projekts, z. B. include($$PWD/SARibbon.pri)
Wenn Sie cmake verwenden, lesen Sie die cmake-Schreibmethode des StaticExample-Beispiels (befindet sich in src/example/StaticExample
).
Nachdem die Kompilierung abgeschlossen ist, importieren Sie SARibbon wie folgt:
Wenn Sie qmake verwenden, können Sie nach Abschluss der Kompilierung einfach die folgenden Dateien in einer Verzeichnisstruktur in Ihr Projekt kopieren
Erstellen Sie zunächst einen Ordner eines Drittanbieters in Ihrem Projekt und kopieren Sie dann den gesamten SARibbon-Ordner. In SARibbon befinden sich bereits mehrere Pri-Dateien, mit denen Sie das Projekt problemlos in Ihr eigenes Verzeichnis importieren können. Die Datei ./importSARibbonBarLib.pri
wird verwendet Importieren Sie die SARibbon-Bibliothek
Nach Abschluss des Einspruchsverfahrens können Sie die folgende Erklärung zu Ihrer Qt-Projektprofildatei hinzufügen
include( $$ PWD/3rdparty/SARibbon/importSARibbonBarLib.pri)
Der Kompilierungsprozess von qmake generiert den Ordner bin_qtx.x_xx unter SARibbon, und die Bibliotheksdateien und DLL-Dateien befinden sich in diesem Ordner, und importSARibbonBarLib.pri
verweist automatisch auf die Bibliotheken in diesem Ordner
Zu diesem Zeitpunkt sieht Ihr Projektverzeichnis so aus:
|-[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]
Es wird empfohlen, diese Bibliothek nach der Ausführung von install
zu verwenden.
Methode zur Einführung von cmake:
find_package (SARibbonBar REQUIRED)
...
target_link_libraries ({your_target_name} PUBLIC SARibbonBar::SARibbonBar)
Wenn find_package
SARibbonBar
nicht finden kann, müssen Sie Ihrem cmake-Projekt den Installationsort von SARibbon
mitteilen.
set(SARibbonBar_DIR "[your SARibbonBar installation root directory]/lib/cmake")
Wenn während der Kompilierung die Option SARIBBON_INSTALL_IN_CURRENT_DIR
auf ON
(Standard) gesetzt ist, wird im Stammverzeichnis des SARibbon-Projekts ein Ordner bin_qt{Qt version}_{MSVC/GNU}_x{32/64}
als Installationsverzeichnis generiert. Dies dient der Anpassung an qmake und erleichtert die Installation mehrerer verschiedener Versionen von Qt und Compilern auf einem einzigen Betriebssystem. Andernfalls wird es unter Windows standardmäßig im Ordner C:Program FilesSARibbonBar
installiert.
Eine Referenz zur Einführung von SARibbon über cmake finden Sie src/example/MainWindowExample/CMakeLists.txt
.
Einzelheiten finden Sie in der Dokumentation: SARibbon Building
Ribbon ist eine Kombination aus Menüleiste und Symbolleiste und wird über ein Tab-Steuerelement angezeigt. Ribbon kann nicht einfach durch Tab+Toolbar ersetzt werden, was viele Details erfordert. SARibbon
bezieht sich auf den Benennungsstil der MFC-Ribbon-Schnittstelle im Design , die Registerkartenseite heißt Category
, und unter jeder Category
gibt es mehrere pannel
, unter denen die Tool-Schaltfläche verwaltet wird. pannel
ähnelt ein wenig der traditionellen Toolbar
, mit einer Hierarchie wie im Bild unten gezeigt, und diese Namen verweisen darauf die MFC-Ribbon-Schnittstellenklasse
Nachfolgend werden einige gebräuchliche Substantive erläutert
Category , stellt dar, was ein Etikett präsentiert, entsprechend SARibbonCategory
.
Kontextkategorie , dies ist eine spezielle Kategorie. Es wird nicht normal angezeigt. Sie müssen anhand des Kontexts beurteilen, ob es angezeigt werden soll. Die gebräuchlichste Methode besteht darin, dass nach dem Einfügen eines Bildes in Word eine Beschriftung zur Bildänderung angezeigt wird. Wenn kein Bild ausgewählt ist, verschwindet die Beschriftung. Dies ist die Kontextkategorie, SARibbonContextCategory
entspricht.
Pannel , Dies ist eine Sammlung von Menüs, wie eine Symbolleiste, entsprechend SARibbonPannel
Anwendungsschaltfläche : Dies ist die Schaltfläche ganz links in der Registerkartenleiste (Wort ist die entsprechende Dateischaltfläche). Diese Schaltfläche löst einige spezielle Seiten oder Menüs aus, SARibbonApplicationButton
entsprechen und ausgeblendet werden können.
Schnellzugriffsleiste , eine einfache Symbolleiste oben zum Platzieren allgemeiner Aktionen, die SARibbonQuickAccessBar
entsprechen.
Galerie-Steuerung , dies ist die auffälligste Steuerung der Multifunktionsleiste. Es zeigt die Funktionen mit intuitiven Bildern an und einige Renderings erfolgen sogar je nach Kontext in Echtzeit. Ein typisches Beispiel ist die Stilauswahl im Office-Wort. entsprechend SARibbonGallery
.
Das Layout von SARibbonBar ist in der folgenden Abbildung dargestellt
Hinweis: Unterschiedliche Layoutschemata wirken sich auf die Platzierung der
Category
undQuick Access Bar
aus
Um SARibbon in MainWindow zu verwenden, müssen Sie QMainWindow
durch SARibbonMainWindow
ersetzen, wodurch sich die Art und Weise ändert, wie QMainWindow
die Menüleiste rendert
Beachten Sie, dass Sie bei Verwendung einer UI-Datei das Menü der UI-Datei löschen sollten, da es sonst zu Ausnahmen kommen kann
Der Beispielcode lautet wie folgt:
# include " SARibbonMainWindow.h "
class MainWindow : public SARibbonMainWindow
{
Q_OBJECT
public:
MainWindow (QWidget* par = nullptr );
...
}
SARibbonMainWindow
unterstützt auch das Rendern im Normalmodus mit dem folgenden Konstruktor:
SARibbonMainWindow (QWidget *parent = nullptr , bool useRibbon = true );
Wenn der zweite Parameter auf „false“ gesetzt ist, wird der normale Menü-Symbolleistenmodus verwendet. Diese Schnittstelle ist für einige Projekte reserviert, die zwischen Multifunktionsleisten- und klassischen Menü-Symbolleistenszenen wechseln müssen. Der Multifunktionsleistenstatus und der klassische Status unterstützen kein Hot-Switching Wenn Sie wechseln müssen, können Sie eine Konfigurationsdatei oder Registrierung festlegen und beim Neustart der Anwendung false an den zweiten Parameter übergeben, um in den klassischen Menüsymbolleistenmodus zu gelangen
SARibbonBar
kann auf QWidget
oder QDialog
verwendet werden, siehe Beispiel: src/example/WidgetWithRibbon
Sie müssen SARibbonBar
lediglich als normales Widget verwenden
Deklarieren Sie zunächst den Zeiger von SARibbonBar
in der Header-Datei
private:
Ui::Widget* ui;
SARibbonBar* mRibbonBar { nullptr };
Erstellen Sie eine SARibbonBar
im Konstruktor des Widgets, es gibt ein QVBoxLayout
-Layout in der UI-Datei des Widgets, platzieren Sie die SARibbonBar
ganz oben und gleichzeitig ist es aufgrund des QWidget-Modus nicht erforderlich, den Titel anzuzeigen, den Sie aufrufen können die SARibbonBar::setTitleVisible
-Methode, um den Titel auszublenden. applicationbutton kann in QWidget auch über SARibbonBar::setApplicationButton
abgebrochen werden, wenn dies nicht erforderlich ist, und schließlich kann das Thema in QWidget über die globale Funktion sa_set_ribbon_ theme
festgelegt werden, da das Thema von SARibbonBar in der Methode SARibbonMainWindow
festgelegt ist
# 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 );
}
So sieht es aus:
Die Reihenfolge beim Erstellen eines Menübands besteht darin, eine Kategorie, dann ein Pannel und schließlich eine Werkzeugschaltfläche (Aktion) zu erstellen.
Verwenden Sie SARibbonBar::addCategoryPage
um eine Kategorie zu SARibbonBar hinzuzufügen, SARibbonCategory::addPannel
um eine Kategorie hinzuzufügen, und SARibbonPannel::addAction
um eine Aktion zu Pannel hinzuzufügen
Der folgende Code zeigt ein Beispiel für das Hinzufügen einer Aktion:
// 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);
Durch den obigen Vorgang wird eine Schaltfläche hinzugefügt. Der Effekt ist in der folgenden Abbildung dargestellt:
Sie können „new“ auch direkt aus SARibbonCategory
heraus zum Pannel hinzufügen. Der folgende Code sieht dann genauso aus wie der oben:
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);
Verschiedene Layoutstile können über addLargeAction
, addMediumAction
und addSmallAction
kombiniert werden. Einzelheiten finden Sie unter:
./src/example/MainWindowExample/mainwindow.cpp
Die sogenannte Kontextkategorie bezieht sich auf das Label/die Labelgruppe, die nur unter besonderen Umständen erscheint. Wenn Office Word beispielsweise ein Bild auswählt, wird die Kontextkategorie der Bildbearbeitung angezeigt, wie in der folgenden Abbildung dargestellt:
Die Klasse, die der Kontextkategorie in SARibbon entspricht, ist SARibbonContextCategory
Die Kontextkategorie wird normalerweise bei der Initialisierung des Programms erstellt. Es wird normalerweise ausgeblendet und angezeigt, wenn es angezeigt werden muss. Die Kontextkategorie wird wie folgt erstellt:
Da die Kontextkategorie bei Verwendung aufgerufen werden muss, empfiehlt es sich, sie mit einer Mitgliedsvariablen zu speichern. Natürlich können Sie die Suche auch durchlaufen ( SARibbonBar::contextCategoryList
kann alle SARibbonContextCategory
auflisten).
Header-Datei:
SARibbonContextCategory* m_contextCategory;
cpp-Datei:
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
......
Die von SARibbonContextCategory
erstellte SARibbonCategory
wird von SARibbonContextCategory
verwaltet. Nur wenn SARibbonContextCategory
angezeigt wird, wird die verwaltete SARibbonCategory
angezeigt
Hinweis: SARibbonContextCategory
ist kein Widget.
Um einen Kontext anzuzeigen, verwenden Sie
SARibbonBar::showContextCategory
/ SARibbonBar::hideContextCategory
:
void MainWindow::onShowContextCategory ( bool on)
{
if (on) {
this -> ribbonBar ()-> showContextCategory (m_contextCategory);
} else {
this -> ribbonBar ()-> hideContextCategory (m_contextCategory);
}
}
**Hinweis: ** Wenn Sie contextCategory
löschen möchten, müssen Sie SARibbonBar::destroyContextCategory
aufrufen, anstatt direkt zu löschen. Nach dem Aufruf von SARibbonBar::destroyContextCategory
müssen Sie den Zeiger von ContextCategory nicht löschen.
Unterschiedliche Kontextkategorien haben unterschiedliche Stile. Einzelheiten finden Sie unter: [SARibbon-Stil](#SARibbon-Stil) und [Vergleich unter verschiedenen Stilen anzeigen](#Vergleich unter verschiedenen Stilen anzeigen).
In der oberen linken Ecke der Multifunktionsleistenoberfläche befindet sich eine spezielle und offensichtliche Schaltfläche namens ApplicationButton
. Diese Taste wird im Allgemeinen zum Aufrufen von Menüs verwendet. SARibbonBar erstellt während der Erstellung standardmäßig ApplicationButton
. Der Text kann auf folgende Weise festgelegt werden:
SARibbonBar* ribbon = ribbonBar();
ribbon-> applicationButton ()->setText(( " File " ));
Der standardmäßige applicationButton erbt von SARibbonApplicationButton
und SARibbonApplicationButton
erbt von QPushButton
, sodass Sie alle Vorgänge für QPushButton
ausführen können. Wenn Sie Ihren eigenen Button als applicationButton festlegen möchten, können Sie natürlich einfach die Funktion SARibbonBar::setApplicationButton
aufrufen.
QuickAccessBar ist die Schnellsymbolleiste in der oberen linken Ecke und rightButtonGroup ist die Schnellsymbolleiste in der oberen rechten Ecke. Im Büromodus ist es in eine linke und eine rechte Seite unterteilt. Im WPS-Modus werden die linke und rechte Seite kombiniert und auf der rechten Seite platziert.
In SARibbon
:
SARibbonQuickAccessBar
-Klasse.SARibbonQuickAccessBar
-Klasse. Während der Initialisierung erstellt SARibbonBar
standardmäßig QuickAccessBar und RightButtonGroup. Seine Zeiger können über SARibbonBar::quickAccessBar
und SARibbonBar::rightButtonGroup
abgerufen werden. Beispiele sind wie folgt:
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
unterstützt das Wechseln zwischen vier Multifunktionsleistenstilen. Hierbei wird auf den Ribbon-Stil von office
und WPS
verwiesen. Der Online-Stilwechsel kann durch void SARibbonBar::setRibbonStyle(RibbonStyle v)
realisiert werden.
Der office
Modus ist der gebräuchlichste Multifunktionsleistenmodus. Die tab
und die Titelleiste nehmen mehr Platz ein. Der von WPS
entwickelte Multifunktionsleistenmodus wurde verbessert Reduzieren Sie die Höhe einer Titelleiste, nutzen Sie den vertikalen Raum effektiv und ändern Sie gleichzeitig das Tastenlayout des Panels von maximal 3 auf 2, wodurch der vertikale Raum weiter komprimiert wird
Screenshot-Vergleich zwischen der Word-Schnittstelle von Office und der Word-Schnittstelle von WPS
Unter dem normalen Bildschirm reduziert der WPS-Stil die vertikale Höhe um mindestens 30 Pixel im Vergleich zum Office-Stil, was einer Einsparung von fast 3 % des vertikalen Platzes im Vergleich zum 1920*1080-Bildschirm entspricht.
In SARibbon heißt die Titelleiste Loose, und die Elemente des Loose-Layouts sind wie unten gezeigt angeordnet:
Dieses Layout stimmt mit dem Standardlayout von Office überein
In SARibbon wird das Layout mit Titelleiste und Registerkarte als kompaktes Layout bezeichnet, und die Elemente des kompakten Layouts sind wie folgt angeordnet:
SARibbonBar stellt eine setRibbonStyle
-Funktion bereit, die den aktuellen Layoutstil definiert, und die Aufzählung von SARibbonBar::RibbonStyle
definiert vier Layoutschemata:
SARibbonBar::RibbonStyleLooseThreeRow
Loose With Three Row (Die v0.x-Version ist SARibbonBar::OfficeStyle
) SARibbonBar::RibbonStyleLooseTwoRow
Lose mit zwei Zeilen (Die v0.x-Version ist SARibbonBar::OfficeStyleTwoRow
) SARibbonBar::RibbonStyleCompactThreeRow
Kompakt mit drei Zeilen (Die v0.x-Version ist SARibbonBar::WpsLiteStyle
) SARibbonBar::RibbonStyleCompactTwoRow
Kompakt mit zwei Zeilen (Die v0.x-Version ist SARibbonBar::WpsLiteStyleTwoRow
) Mit der Funktion SARibbonBar::setEnableWordWrap
können Sie steuern, ob der Text der SARibbonBar umgebrochen wird oder nicht, die Höhe der SARibbonBar
ist festgelegt und ob der Text umgebrochen wird oder nicht, wirkt sich auf die Größe der Symbolanzeige aus, also wenn Sie das Symbol möchten Um größer zu wirken, können Sie den Text so einstellen, dass er nicht umbrochen wird
Im SARibbonBar::RibbonStyleCompactTwoRow
-Layoutstil wird der Text ohne Umbruch wie folgt angezeigt:
SARibbonBar::RibbonStyleCompactTwoRow
eine 2-Punkte-Kombination SARibbonBar::setEnableWordWrap(false)
).
Wenn der SARibbonBar-Text auf „Nicht umbrechen“ eingestellt ist, wird der Anzeigebereich des Symbols größer
SARibbonPannel
bietet drei Methoden zum Hinzufügen von Aktionen:
addLargeAction
addMediumAction
addSmallAction
Im Standard-Panel verfügt eine Aktion (Schaltfläche) über drei Layouts. Am Beispiel von Office Word entsprechen die drei Layouts des Pannels tatsächlich der Anzahl der belegten Zeilen:
SARibbonPannelItem::RowProportion
wird verwendet, um die Anzahl der Zeilen darzustellen, die jedes Formular im Pannel einnimmt. Es wird häufig im Panel-Layout verwendet. Diese Aufzählung ist wie folgt definiert:
/* *
* @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.
};
Jede in SARibbonPannel
verwaltete Aktion verfügt über eine private Eigenschaft ( SARibbonPannelItem::RowProportion
). Diese Eigenschaft bestimmt das Layout dieser Aktion im Panel.
SARibbonPannel
Layoutmodus Der Drei-Zeilen-Modus ist das traditionelle Panel-Layout, wie in der folgenden Abbildung dargestellt:
Im 3-Zeilen-Modus gibt es drei Arten von Platzhaltern: groß, mittel und klein
Das Pannel im 3-Zeilen-Modus zeigt den Titel des Pannels im Pannel-Titelbereich an, und es gibt einen weiteren OptionAction-Bereich. Dieser Bereich wird verwendet, um dieser Aktion einen speziellen Auslöser hinzuzufügen. Wenn OptionAction nicht gesetzt ist, wird dieser Bereich ausgeblendet.
Der zweizeilige Modus ist die WPS-verbesserte Layoutmethode, wie in der folgenden Abbildung dargestellt:
Im 2-Zeilen-Modus sind die mittleren und kleinen Platzhalter (SARibbonPannelItem::RowProportion) gleich und es wird kein Unterschied gemacht.
Im 2-Zeilen-Modus zeigt das Pannel den Titel nicht an.
Die Anpassung des Menübands ist eine Funktion des Menübands. Mithilfe der benutzerdefinierten Benutzeroberfläche von Office und WPS können Benutzer viele Inhalte für ihr eigenes Menüband definieren oder sogar eine Benutzeroberfläche definieren, die sich völlig von der ursprünglichen unterscheidet.
Das Folgende ist die benutzerdefinierte Benutzeroberfläche von Office.
SARibbon bezieht sich auf die Schnittstelle von Office und WPS und kapselt die benutzerfreundliche Klasse SARibbonCustomize**
, einschließlich der folgenden fünf Klassen:
SARibbonCustomizeDialog
SARibbonCustomizeWidget
SARibbonCustomizeData
SARibbonActionsManager
SARibbonActionsManagerModel
Tatsächliche Benutzer können nur SARibbonActionsManager
und SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
verwenden, andere Benutzer werden sie nicht normal verwenden.
SARibbonActionsManager
wird verwendet, um QAction
zu verwalten, die QAction
, die angepasst werden soll, zu SARibbonActionsManager
zur Verwaltung hinzuzufügen und QAction
zu klassifizieren, damit sie in SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
angezeigt werden können.
SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
ist ein spezifisches Anzeigefenster. Der SARibbonCustomizeDialog
kapselt den SARibbonCustomizeWidget
als Dialogfeld. Wenn Sie es wie Office in das Konfigurationsdialogfeld integrieren möchten, können Sie das SARibbonCustomizeWidget
verwenden. Die Auswirkung von SARibbonCustomizeDialog
ist in der folgenden Abbildung dargestellt:
So fügen Sie benutzerdefinierte Funktionen hinzu.
Definieren Sie zunächst SARibbonActionsManager
als Mitgliedsvariable von MainWindow
.
// Define member variables in the MainWindow.h.
SARibbonActionsManager* m_ribbonActionMgr; // /< Manage all actions
Während der Initialisierung von MainWindow
muss eine große Anzahl von QAction
erstellt werden. Das übergeordnete Objekt von QAction
wird als MainWindow
bezeichnet. Darüber hinaus wird ein Ribbon-Layout generiert, z. B. das Hinzufügen einer Kategorie, das Hinzufügen eines Panels und andere Vorgänge. Fügen Sie nach Abschluss der oben genannten Vorgänge die folgenden Schritte hinzu, damit SARibbonActionsManager
automatisch alle QAction
verwalten kann.
// Initialization of MainWindow and generation of QAction.
// Generate ribbon layout.
m_ribbonActionMgr = new SARibbonActionsManager(mainWinowPtr);
m_ribbonActionMgr-> autoRegisteActions (mainWinowPtr);
Die Schlüsselfunktion autoRegisteActions
von SARibbonActionsManager
kann alle Unterobjekte unter SARibbonMainWindow
durchlaufen, Aktionen suchen und registrieren und alle SARibbonCategory
durchlaufen. Die Aktionen unter SARibbonCategory
werden nach dem Titelnamen von SARibbonCategory
klassifiziert. Diese Funktion registriert auch die Aktionen unter SARibbonMainWindow
, jedoch nicht unter einer Kategorie, als „NotInRibbonCategoryTag“-Tags. Der Standardname ist „nicht im Menüband“.
So rufen Sie SARibbonCustomizeDialog wie folgt auf:
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
}
Bevor das MainWindow generiert wird, muss der angepasste Inhalt geladen werden. Daher sollte dem Konstruktor die folgende Anweisung hinzugefügt werden:
// Constructor of MainWindow
sa_apply_customize_from_xml_file ( " customization.xml " , this , m_ribbonActionMgr);
sa_apply_customize_from_xml_file
ist die in SARibbonCustomizeWidget.h
bereitgestellte Funktion. Die angepassten Inhalte in der Konfigurationsdatei werden direkt im MainWindow angewendet.
Auf diese Weise wird die Software bei jedem Start entsprechend der Konfigurationsdatei geladen.
Github – https://github.com/czyt1988/data-workbench
Gitee – https://gitee.com/czyt1988/data-workbench
Der spezifische Code zur Generierung des Menübands ist zu sehen:
https://github.com/czyt1988/data-workbench/blob/master/src/APP/DAAppRibbonArea.cpp
Es gibt zwei Möglichkeiten, sich auf das Thema High-DPI-Bildschirmdarstellung vorzubereiten:
Qt::AA_EnableHighDpiScaling
für QApplication
in der Hauptfunktion festDieses Attribut ermöglicht es der Anwendung, die Pixeldichte der Anzeige automatisch zu erkennen, um eine automatische Skalierung zu erreichen, wie zum Beispiel:
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
in der Hauptfunktion fest: QApplication::setHighDpiScaleFactorRoundingPolicy
Qt5.6 bietet Qt::AA_EnableHighDpiScaling
, kann das Problem von Bildschirmen mit hoher DPI jedoch nicht vollständig lösen. Qt5.14 hat eine Richtlinieneinstellung für die Bildschirmskalierung mit hoher Auflösung namens QApplication::setHighDpiScaleFactorRoundingPolicy
bereitgestellt, die auch in der Hauptfunktion festgelegt werden muss, zum Beispiel:
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);
......
}
Es wird häufig die Rückmeldung gegeben, dass nach der Verwendung von SARibbonBar die Tastenkombinationen inaktiver Registerkarten nicht reagieren und nur die Tastenkombinationen aktivierter Registerkarten reagieren. Im herkömmlichen Symbolleistenmodus bleibt die Tastenkombination wirksam, da die Symbolleiste, in der sich die Aktion befindet, immer im Vordergrund steht. Wenn es sich jedoch um SARibbonBar handelt, wird die Tastenkombination im Aktionsbereich ausgeblendet und nach dem Ausblenden nicht wirksam. Wenn Sie möchten, dass die Tastenkombination unabhängig davon wirksam wird, ob Pannel ausgeblendet ist oder nicht, legen Sie die Tastenkombination fest. Die Eigenschaft „shortcutContext“ von Qt::ApplicationShortcut
ist ebenfalls ungültig. In diesem Fall können Sie die Tastenkombination manuell an der Stelle erstellen, an der Sie die Kategorie erstellt haben
Beispiel:
ribbon build
...
QShortcut* shortCut = new QShortcut(QKeySequence(QLatin1String( " Ctrl+S " )), this );
connect (shortCut, &QShortcut::activated, this , [ actSave ]() {
actSave-> trigger ();
});