中文文档点击这里,QQ群:434014314
Windows (2019, más reciente) | Linux ubuntu (20.04, más reciente) | Mac (11-último) | |
---|---|---|---|
Qt5.12 | |||
Qt5.13 | |||
Qt5.14 | |||
Qt5.15 | |||
Qt6.0 | |||
Qt6.1 | |||
Qt6.2 | |||
Qt6.3 | |||
Qt6.4 | |||
Qt6.5 | |||
Qt6.6 |
Este es un Ribbon control
en el marco Qt
, que proporciona una interfaz similar a la del software Microsoft Office. SARibbon
es adecuado para software de gran tamaño, software industrial y interfaz de usuario de software compleja. SARibbon
está diseñado con referencia al estilo de nombre de la interfaz Ribbon MFC, y el estilo de interfaz de SARibbon
se refiere a la interfaz Ribbon del software de la serie Microsoft Office y el software WPS, y combina las ventajas de ambos. SARibbon
es un widget de cinta que puede definir una variedad de estilos de temas y puede definir rápidamente el estilo de tema deseado a través de qss. Para facilitar el desarrollo de software de gran tamaño, SARibbon
encapsula algunos controles funcionales de uso común, como los widgets de color.
tema win7: Tema de office2013: Tema de office2016: Tema de office2021: tema oscuro:
Protocolo MIT, bienvenido a todos a usarlo y dar comentarios.
casa rural - https://gitee.com/czyt1988/SARibbon
github-https://github.com/czyt1988/SARibbon
SARibbon
proporciona métodos de compilación qmake y cmake, y proporciona un archivo SARibbon.h
y SARibbon.cpp
combinado para incrustación estática en un solo proyecto.
SARibbon
admite la biblioteca de terceros QWindowKit. Al mismo tiempo, también admite soluciones simples sin marco. Si necesita compatibilidad nativa con ventanas para el sistema operativo, como recortar bordes después de Windows 7 y maximizar el efecto de desplazamiento de los botones en Windows 11, se recomienda habilitar la biblioteca QWindowKit, la biblioteca QWindowKit puede resolver mejor el problema del movimiento de múltiples pantallas.
Si desea confiar en la biblioteca QWindowKit, primero debe compilar la biblioteca QWindowKit, QWindowKit como submódulo del proyecto SARibbon, si el parámetro '-- recursive' no está incluido en 'git clone', use el comando 'actualización de submódulos' necesita ser ejecutado:
git submodule update --init --recursive
Para conocer el proceso de construcción detallado, consulte el documento: Construyendo SARibbon
SARibbon proporciona un archivo SARibbon.h
combinado y un archivo SARibbon.cpp
. Solo necesita importar estos dos archivos en su propio proyecto y, al mismo tiempo, importar archivos de recursos y archivos de biblioteca de terceros para usarlos, sin necesidad de compilarlos en bibliotecas dinámicas. o bibliotecas estáticas, puede consultar el ejemplo StaticExample (ubicado en src/example/StaticExample
), se utilizará la incrustación estática en SARibbon.h
, SARibbon.cpp
, SARibbon.pri
, SARibbonBar/resource.qrc
y SARibbonBar/3rdparty
, SARibbonBar/resource
dos carpetas:
El directorio de su proyecto se verá así:
|-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
Para compilar con qmake, puede seguir los pasos a continuación:
SARibbon.h
, SARibbon.cpp
, SARibbon.pri
al directorio de su proyectoSARibbonBar
en el directorio de su proyectosrc/SARibbonBar/resource.qrc
en el código fuente a la carpeta SARibbonBar
en el directorio de su proyectoresource
en src/SARibbonBar
a la carpeta SARibbonBar
en el directorio de su proyectoSARibbon.pri
al archivo pro de su proyecto, por ejemplo, include($$PWD/SARibbon.pri)
Si usa cmake, consulte el método de escritura cmake del ejemplo StaticExample (ubicado en src/example/StaticExample
).
Una vez completada la compilación, importe SARibbon de la siguiente manera:
Si usa qmake, simplemente puede copiar los siguientes archivos en su proyecto en una estructura de directorio una vez completada la compilación.
Primero cree una carpeta de terceros en su proyecto y luego copie toda la carpeta SARibbon. Ya hay varios archivos pri dentro de SARibbon que pueden permitirle importar fácilmente el proyecto a su propio directorio, y el archivo ./importSARibbonBarLib.pri
se usa para importar la biblioteca SARibbon
Después de completar el proceso de apelación, puede agregar la siguiente declaración a su archivo de perfil de proyecto Qt
include( $$ PWD/3rdparty/SARibbon/importSARibbonBarLib.pri)
El proceso de compilación de qmake generará la carpeta bin_qtx.x_xx en SARibbon, y los archivos de la biblioteca y los archivos dll están en esta carpeta, e importSARibbonBarLib.pri
hará referencia automáticamente a las bibliotecas en esta carpeta.
En este punto, el directorio de su proyecto se ve así:
|-[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]
Se recomienda utilizar esta biblioteca después de ejecutar install
.
Método para introducir cmake:
find_package (SARibbonBar REQUIRED)
...
target_link_libraries ({your_target_name} PUBLIC SARibbonBar::SARibbonBar)
Si find_package
no puede encontrar SARibbonBar
, debe informar a su proyecto cmake de la ubicación de instalación de SARibbon
.
set(SARibbonBar_DIR "[your SARibbonBar installation root directory]/lib/cmake")
Si durante la compilación, la opción SARIBBON_INSTALL_IN_CURRENT_DIR
está configurada en ON
(predeterminada), se generará una carpeta bin_qt{Qt version}_{MSVC/GNU}_x{32/64}
en el directorio raíz del proyecto SARibbon como directorio de instalación. Esto es para alinearse con qmake y facilitar la instalación de múltiples versiones diferentes de Qt y compiladores en un solo sistema operativo. De lo contrario, en Windows, se instalará en la carpeta C:Program FilesSARibbonBar
de forma predeterminada.
Para obtener referencia sobre la introducción de SARibbon a través de cmake, consulte src/example/MainWindowExample/CMakeLists.txt
.
Para más detalles, consulte la documentación: SARibbon Building
La cinta es una combinación de la barra de menú y la barra de herramientas, y se muestra a través de un control de pestaña. La cinta no se puede reemplazar simplemente por Tab + barra de herramientas, lo que implica muchos detalles. SARibbon
se refiere al estilo de nomenclatura de la interfaz de la cinta MFC en el diseño. , la página de pestañas se llama Category
y hay varios pannel
debajo de cada Category
, debajo del cual se administra el botón de herramientas. pannel
es un poco como la Toolbar
tradicional, con una jerarquía como se muestra en la imagen a continuación, y estos nombres hacen referencia a Clase de interfaz de cinta MFC
Algunos sustantivos comunes se explican a continuación.
Categoría , que representa lo que presenta una etiqueta, correspondiente a SARibbonCategory
.
Categoría de contexto , esta es una categoría especial. No se muestra normalmente. Debe juzgar si debe mostrarse según el contexto. La forma más común es que después de insertar una imagen en Word, aparecerá una etiqueta relacionada con la modificación de la imagen. Si no se selecciona ninguna imagen, la etiqueta desaparecerá. Esta es la categoría de contexto, correspondiente a SARibbonContextCategory
.
Panel , esta es una colección de menús, como una barra de herramientas, correspondiente a SARibbonPannel
Botón de aplicación , este es el botón más a la izquierda en la barra de pestañas (la palabra es el botón de archivo correspondiente). Este botón activará algunas páginas o menús especiales, correspondientes a SARibbonApplicationButton
, que se pueden ocultar.
Barra de acceso rápido , una barra de herramientas sencilla en la parte superior para colocar acciones comunes correspondientes a SARibbonQuickAccessBar
.
Control de galería , este es el control de cinta más llamativo. Muestra las funciones con imágenes intuitivas, e incluso algunos renderizados se realizan en tiempo real según el contexto. Un ejemplo típico es la elección del estilo en la palabra de oficina. correspondiente a SARibbonGallery
.
El diseño de SARibbonBar se muestra en la siguiente figura.
Nota: Los diferentes esquemas de diseño afectan la ubicación de la
Category
yQuick Access Bar
Para usar SARibbon en MainWindow, debe reemplazar QMainWindow
con SARibbonMainWindow
, que modifica la forma en que QMainWindow
representa la barra de menú
Tenga en cuenta que si utiliza un archivo UI, debe eliminar el menú del archivo UI; de lo contrario, puede causar algunas excepciones.
El código de muestra es el siguiente:
# include " SARibbonMainWindow.h "
class MainWindow : public SARibbonMainWindow
{
Q_OBJECT
public:
MainWindow (QWidget* par = nullptr );
...
}
SARibbonMainWindow
también admite la representación en modo normal con el siguiente constructor:
SARibbonMainWindow (QWidget *parent = nullptr , bool useRibbon = true );
Si el segundo parámetro se establece en falso, utilizará el modo de barra de herramientas de menú normal. Esta interfaz está reservada para algunos proyectos que necesitan poder cambiar entre las escenas de la barra de herramientas del menú de cinta y clásica, el estado de la cinta y el estado clásico no admiten el cambio en caliente. , si necesita cambiar, puede configurar un archivo de configuración o registro, pasar falso al segundo parámetro cuando se reinicia la aplicación para ingresar al modo de barra de herramientas del menú clásico
SARibbonBar
se puede usar en QWidget
o QDialog
, vea el ejemplo: src/example/WidgetWithRibbon
Todo lo que necesitas hacer es usar SARibbonBar
como un widget normal.
Primero, declare el puntero de SARibbonBar
en el archivo de encabezado
private:
Ui::Widget* ui;
SARibbonBar* mRibbonBar { nullptr };
Cree una SARibbonBar
en el constructor del widget, hay un diseño QVBoxLayout
en el archivo ui del widget, coloque la SARibbonBar
en la parte superior y, al mismo tiempo, desde el modo QWidget, no es necesario mostrar el título, puede llamar el método SARibbonBar::setTitleVisible
para ocultar el título. El botón de aplicación también se puede cancelar en QWidget a través de SARibbonBar::setApplicationButton
si no es necesario y, finalmente, dado que el tema de SARibbonBar está configurado en el método SARibbonMainWindow
, el tema se puede configurar en QWidget a través de la función global 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 );
}
Así es como se ve:
El orden de creación de una cinta es crear una Categoría, luego un Panel y finalmente un botón de herramienta (acción)
Utilice SARibbonBar::addCategoryPage
para agregar una categoría a SARibbonBar, SARibbonCategory::addPannel
para agregar una categoría y SARibbonPannel::addAction
para agregar una acción al Pannel
El siguiente código muestra un ejemplo de cómo agregar una acción:
// 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);
La operación anterior agrega un botón y el efecto se muestra en la siguiente figura:
También puede salir directamente de SARibbonCategory
y agregarlo al panel, y el siguiente código tendrá el mismo aspecto que el anterior:
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);
Se pueden combinar diferentes estilos de diseño mediante addLargeAction
, addMediumAction
, addSmallAction
. Para obtener más detalles, consulte:
./src/example/MainWindowExample/mainwindow.cpp
La denominada categoría de contexto se refiere a la etiqueta/grupo de etiquetas que aparece sólo en circunstancias especiales. Por ejemplo, cuando Office Word selecciona una imagen, aparecerá la categoría de contexto de edición de imágenes, como se muestra en la siguiente figura:
La clase correspondiente a la Categoría de Contexto en SARibbon es SARibbonContextCategory
La categoría de contexto generalmente se crea cuando se inicializa el programa. Por lo general, está oculto y se muestra cuando es necesario mostrarlo. La categoría de contexto se crea de la siguiente manera:
Dado que la categoría de contexto debe invocarse cuando se usa, es una buena opción guardarla con una variable miembro. Por supuesto, también puede recorrer la búsqueda ( SARibbonBar::contextCategoryList
puede enumerar todos SARibbonContextCategory
).
archivo de encabezado:
SARibbonContextCategory* m_contextCategory;
archivo 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
......
La SARibbonCategory
creada por SARibbonContextCategory
es administrada por SARibbonContextCategory
. Solo cuando se muestra SARibbonContextCategory
, se muestra la SARibbonCategory
administrada
Nota: SARibbonContextCategory
no es un widget.
Para mostrar un uso contextual
SARibbonBar::showContextCategory
/ SARibbonBar::hideContextCategory
:
void MainWindow::onShowContextCategory ( bool on)
{
if (on) {
this -> ribbonBar ()-> showContextCategory (m_contextCategory);
} else {
this -> ribbonBar ()-> hideContextCategory (m_contextCategory);
}
}
**Nota: ** si desea eliminar contextCategory
, debe llamar SARibbonBar::destroyContextCategory
en lugar de eliminarlo directamente. Después de llamar SARibbonBar::destroyContextCategory
, no es necesario eliminar el puntero de ContextCategory.
Contexto diferente La categoría tiene un estilo diferente. Para obtener más información, consulte: [Estilo SARibbon](#Estilo SARibbon) y [Mostrar comparación en diferentes estilos](#Mostrar comparación en diferentes estilos).
Hay un botón especial y obvio llamado ApplicationButton
en la esquina superior izquierda de la interfaz de la cinta. Este botón se utiliza generalmente para abrir menús. SARibbonBar crea ApplicationButton
de forma predeterminada durante la construcción. Su texto se puede configurar de las siguientes maneras:
SARibbonBar* ribbon = ribbonBar();
ribbon-> applicationButton ()->setText(( " File " ));
El applicationButton predeterminado hereda de SARibbonApplicationButton
y SARibbonApplicationButton
hereda de QPushButton
, por lo que puede realizar todas las operaciones en QPushButton
. Por supuesto, si desea configurar su propio botón como botón de aplicación, puede simplemente llamar a la función SARibbonBar::setApplicationButton
.
QuickAccessBar es la barra de herramientas rápida en la esquina superior izquierda y rightButtonGroup es la barra de herramientas rápida en la esquina superior derecha. En modo oficina, se divide en lados izquierdo y derecho. En el modo WPS, los lados izquierdo y derecho se combinarán y se colocarán a la derecha.
En SARibbon
:
SARibbonQuickAccessBar
.SARibbonQuickAccessBar
. Durante la inicialización, SARibbonBar
creará QuickAccessBar y RightButtonGroup de forma predeterminada. Sus punteros se pueden obtener a través de SARibbonBar::quickAccessBar
y SARibbonBar::rightButtonGroup
. Los ejemplos son los siguientes:
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
admite el cambio entre cuatro estilos de cinta. Aquí se hace referencia al estilo de cinta de office
y WPS
. El cambio de estilo en línea se puede realizar mediante void SARibbonBar::setRibbonStyle(RibbonStyle v)
.
El modo office
es el modo de cinta más común, la tab
y la barra de título ocupan más espacio, el modo de cinta diseñado por WPS
ha sido mejorado, reduce la altura de la cinta, la etiqueta y la barra de título están configuradas juntas, para reduce la altura de una barra de título, utiliza efectivamente el espacio vertical y, al mismo tiempo, el diseño de los botones del panel cambia de un máximo de 3 a 2, comprimiendo aún más el espacio vertical.
Comparación de capturas de pantalla entre la interfaz de Word de Office y la interfaz de Word de WPS
En la pantalla normal, el estilo WPS reducirá la altura vertical en al menos 30 píxeles en comparación con el estilo Office, lo que equivale a ahorrar casi el 3% del espacio vertical en comparación con la pantalla de 1920*1080.
En SARibbon, el que tiene la barra de título se llama Suelto y los elementos del diseño suelto están organizados como se muestra a continuación:
Este diseño es coherente con el diseño predeterminado de Office.
En SARibbon, el diseño con una barra de título y una pestaña se denomina diseño compacto, y los elementos del diseño compacto se organizan de la siguiente manera:
SARibbonBar proporciona una función setRibbonStyle
que define el estilo de diseño actual y la enumeración SARibbonBar::RibbonStyle
define cuatro esquemas de diseño:
SARibbonBar::RibbonStyleLooseThreeRow
Loose With Three Row (La versión v0.x es SARibbonBar::OfficeStyle
) SARibbonBar::RibbonStyleLooseTwoRow
suelto con dos filas (la versión v0.x es SARibbonBar::OfficeStyleTwoRow
) SARibbonBar::RibbonStyleCompactThreeRow
Compact con tres filas (la versión v0.x es SARibbonBar::WpsLiteStyle
) SARibbonBar::RibbonStyleCompactTwoRow
Compacto con dos filas (la versión v0.x es SARibbonBar::WpsLiteStyleTwoRow
) La función SARibbonBar::setEnableWordWrap
le permite controlar si el texto de SARibbonBar se ajusta o no, la altura de SARibbonBar
es fija y si el texto se ajusta o no afectará el tamaño de la visualización del icono, por lo que si desea que el icono Para que parezca más grande, puedes configurar el texto para que no se ajuste.
En el estilo de diseño SARibbonBar::RibbonStyleCompactTwoRow
, el texto sin ajuste se muestra de la siguiente manera:
SARibbonBar::RibbonStyleCompactTwoRow
紧凑结构,2行模式把文字设置为不换行后( SARibbonBar::setEnableWordWrap(false)
)的效果如下
Cuando el texto de SARibbonBar está configurado como no envolvente, el espacio de visualización del icono se hace más grande
SARibbonPannel
proporciona tres métodos para agregar acciones:
addLargeAction
addMediumAction
addSmallAction
En el panel estándar, una acción (botón) tiene tres modos de diseño. Tomando Office Word como ejemplo, los tres diseños del panel son en realidad el número de líneas ocupadas:
SARibbonPannelItem::RowProportion
se utiliza para representar el número de filas que ocupa cada formulario en el panel. Se utiliza comúnmente en el diseño del panel. Esta enumeración se define de la siguiente manera:
/* *
* @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.
};
Cada acción gestionada en SARibbonPannel
tendrá una propiedad privada ( SARibbonPannelItem::RowProportion
). Esta propiedad determina el diseño de esta acción en el panel.
SARibbonPannel
El modo de tres líneas es el diseño de panel tradicional, como se muestra en la siguiente figura:
En el modo de 3 líneas, hay tres tipos de marcadores de posición: grande, mediano y pequeño.
El panel en el modo de 3 líneas mostrará el título del panel en el área Título del panel, y hay otra área OptionAction. Esta área se utiliza para agregar un desencadenante especial a esta acción. Si no se establece OptionAction, esta área está oculta.
El modo de dos líneas es el método de diseño mejorado de WPS, como se muestra en la siguiente figura:
En el modo de 2 líneas, los marcadores de posición medianos y pequeños (SARibbonPannelItem::RowProportion) son los mismos y no se hace ninguna distinción.
En el modo de 2 líneas, el panel no muestra el título.
La personalización de la cinta es una característica de la cinta. Con referencia a la interfaz personalizada de Office y WPS, los usuarios pueden definir una gran cantidad de contenido para su propia cinta, o incluso definir una interfaz completamente diferente a la original.
La siguiente es la interfaz personalizada de Office.
SARibbon se refiere a la interfaz de Office y WPS y encapsula la clase SARibbonCustomize**
fácil de usar, que incluye las cinco clases siguientes:
SARibbonCustomizeDialog
SARibbonCustomizeWidget
SARibbonCustomizeData
SARibbonActionsManager
SARibbonActionsManagerModel
Los usuarios reales solo pueden usar SARibbonActionsManager
y SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
, y otros usuarios no los usarán normalmente.
SARibbonActionsManager
se utiliza para administrar QAction
, agregar la QAction
que se desea personalizar a SARibbonActionsManager
para su administración y clasificar QAction
para que se puedan mostrar en SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
.
SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
es una ventana de visualización específica. SARibbonCustomizeDialog
encapsula SARibbonCustomizeWidget
como un cuadro de diálogo. Si desea integrarlo en el cuadro de diálogo de configuración como Office, puede utilizar SARibbonCustomizeWidget
. El efecto de SARibbonCustomizeDialog
se muestra en la siguiente figura:
Aquí se explica cómo agregar funciones personalizadas.
Primero, defina SARibbonActionsManager
como la variable miembro de MainWindow
.
// Define member variables in the MainWindow.h.
SARibbonActionsManager* m_ribbonActionMgr; // /< Manage all actions
Durante la inicialización de MainWindow
, es necesario crear una gran cantidad de QAction
. El objeto principal de QAction
se designa como MainWindow
. Además, se generará un diseño de cinta, como agregar categoría, agregar panel y otras operaciones. Una vez completadas las operaciones anteriores, agregue los siguientes pasos para permitir que SARibbonActionsManager
administre automáticamente todas QAction
.
// Initialization of MainWindow and generation of QAction.
// Generate ribbon layout.
m_ribbonActionMgr = new SARibbonActionsManager(mainWinowPtr);
m_ribbonActionMgr-> autoRegisteActions (mainWinowPtr);
La función clave autoRegisteActions
de SARibbonActionsManager
puede atravesar todos los subobjetos bajo SARibbonMainWindow
, buscar y registrar acciones y atravesar todas SARibbonCategory
. Las acciones bajo SARibbonCategory
se clasifican según el nombre del título de SARibbonCategory
. Esta función también registra las acciones en SARibbonMainWindow
, pero no en ninguna categoría, como etiquetas 'NotInRibbonCategoryTag'. El nombre predeterminado es 'no en la cinta'.
Para llamar a SARibbonCustomizeDialog de la siguiente manera:
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
}
Antes de generar MainWindow, es necesario cargar el contenido personalizado. Por lo tanto, se debe agregar la siguiente declaración al constructor:
// Constructor of MainWindow
sa_apply_customize_from_xml_file ( " customization.xml " , this , m_ribbonActionMgr);
sa_apply_customize_from_xml_file
es la función proporcionada en SARibbonCustomizeWidget.h
. El contenido personalizado en el archivo de configuración se aplica directamente en MainWindow.
De esta forma, el software se cargará según el archivo de configuración cada vez que se inicie.
github: https://github.com/czyt1988/data-workbench
casa rural - https://gitee.com/czyt1988/data-workbench
Se puede ver el código de generación de cinta específico:
https://github.com/czyt1988/data-workbench/blob/master/src/APP/DAAppRibbonArea.cpp
Hay dos formas de prepararse para el problema de la visualización de pantalla con altos DPI:
Qt::AA_EnableHighDpiScaling
para QApplication
en la función principalEste atributo permite que la aplicación detecte automáticamente la densidad de píxeles de la pantalla para lograr una escala automática, como por ejemplo:
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
en la función principal: QApplication::setHighDpiScaleFactorRoundingPolicy
Qt5.6 proporciona Qt::AA_EnableHighDpiScaling
, pero no puede resolver completamente el problema de las pantallas con altos DPI. Qt5.14 ha proporcionado una configuración de política de escala de pantalla de alto ppp llamada QApplication::setHighDpiScaleFactorRoundingPolicy
, que también debe configurarse en la función principal, por ejemplo:
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);
......
}
Las personas a menudo comentan que después de usar SARibbonBar, las teclas de acceso directo de las páginas con pestañas inactivas no responden y solo responden las teclas de acceso directo de las páginas con pestañas activadas. Si está en el modo de barra de herramientas tradicional, la tecla de acceso directo seguirá vigente porque la barra de herramientas donde se ubica la acción siempre está al frente. Sin embargo, si es SARibbonBar, la tecla de acceso directo en el panel de acciones estará oculta y no tendrá efecto después de ocultarla. Si desea que la tecla de acceso directo tenga efecto independientemente de si el Panel está oculto o no, configure las teclas de acceso directo. La propiedad shortContext 'de Qt::ApplicationShortcut
tampoco es válida. En este caso, puede crear manualmente la tecla de acceso directo en el lugar donde creó la Categoría
ejemplo:
ribbon build
...
QShortcut* shortCut = new QShortcut(QKeySequence(QLatin1String( " Ctrl+S " )), this );
connect (shortCut, &QShortcut::activated, this , [ actSave ]() {
actSave-> trigger ();
});