中文文档点击这里,QQ群:434014314
Windows(2019, mais recente) | Linux Ubuntu (20.04, mais recente) | Mac (11 mais recente) | |
---|---|---|---|
Qt5.12 | |||
Qt5.13 | |||
Qt5.14 | |||
Qt5.15 | |||
Qt6.0 | |||
Qt6.1 | |||
Qt6.2 | |||
Qt6.3 | |||
Qt6.4 | |||
Qt6.5 | |||
Qt6.6 |
Este é um Ribbon control
no framework Qt
, que fornece uma interface semelhante à do software Microsoft Office. SARibbon
é adequado para software grande, software industrial e UI de software complexo. SARibbon
foi projetado com referência ao estilo de nomenclatura da interface MFC Ribbon, e o estilo de interface do SARibbon
refere-se à interface Ribbon do software da série Microsoft Office e do software WPS, e combina as vantagens de ambos. SARibbon
é um widget de faixa de opções que pode definir uma variedade de estilos de tema e pode definir rapidamente o estilo de tema desejado por meio de qss. Para facilitar o desenvolvimento de software grande, SARibbon
encapsula alguns controles funcionais comumente usados, como Color Widgets
tema win7: tema office2013:
tema office2016:
tema office2021:
tema escuro:
Protocolo MIT, bem-vindo para que todos usem e façam comentários
turismo rural - https://gitee.com/czyt1988/SARibbon
github - https://github.com/czyt1988/SARibbon
SARibbon
fornece métodos de construção qmake e cmake e fornece um arquivo SARibbon.h
e SARibbon.cpp
mesclado para incorporação estática em um único projeto
SARibbon
oferece suporte à biblioteca de terceiros QWindowKit. Ao mesmo tempo, também oferece suporte a soluções simples sem moldura. Se você precisar de suporte de janela nativo para o sistema operacional, como corte de borda após o Windows 7 e maximizar o efeito de flutuação dos botões no Windows 11, é recomendado habilitar a Biblioteca QWindowKit, a Biblioteca QWindowKit pode resolver melhor o problema de movimento de várias telas
Se você quiser contar com a Biblioteca QWindowKit, precisa ser compilado primeiro Biblioteca QWindowKit, QWindowKit Como os submódulos do projeto SARibbon, se o parâmetro '--recursive' não estiver incluído no 'git clone', o comando 'submodules update' precisa ser executado:
git submodule update --init --recursive
Para o processo de construção detalhado, consulte o documento: Construindo SARibbon
SARibbon fornece arquivo SARibbon.h
e arquivo SARibbon.cpp
, você só precisa importar esses dois arquivos em seu próprio projeto e, ao mesmo tempo, importar arquivos de recursos e arquivos de biblioteca de terceiros para usar, sem necessidade de compilar em bibliotecas dinâmicas ou bibliotecas estáticas, você pode consultar o exemplo StaticExample (localizado em src/example/StaticExample
), a incorporação estática será usada para SARibbon.h
, SARibbon.cpp
, SARibbon.pri
, SARibbonBar/resource.qrc
e SARibbonBar/3rdparty
, SARibbonBar/resource
duas pastas:
O diretório do seu projeto ficará assim:
|-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 com qmake, você pode seguir os passos abaixo:
SARibbon.h
, SARibbon.cpp
, SARibbon.pri
para o diretório do seu projetoSARibbonBar
no diretório do seu projetosrc/SARibbonBar/resource.qrc
no código-fonte para a pasta SARibbonBar
no diretório do seu projetoresource
em src/SARibbonBar
para a pasta SARibbonBar
no diretório do seu projetoSARibbon.pri
para o arquivo pro do seu projeto, por exemplo, include($$PWD/SARibbon.pri)
Se você usar cmake, consulte o método de escrita cmake do exemplo StaticExample (localizado em src/example/StaticExample
)
Após a conclusão da compilação, importe o SARibbon da seguinte maneira:
Se você usar qmake, você pode simplesmente copiar os seguintes arquivos em seu projeto em uma estrutura de diretórios após a conclusão da compilação
Crie primeiro uma pasta de terceiros em seu projeto e, em seguida, copie toda a pasta SARibbon. Já existem vários arquivos pri dentro do SARibbon que podem facilmente permitir que você importe o projeto para seu próprio diretório, e o arquivo ./importSARibbonBarLib.pri
é usado para importar a biblioteca SARibbon
Depois de concluir o processo de apelação, você pode adicionar a seguinte declaração ao arquivo do perfil do seu projeto Qt
include( $$ PWD/3rdparty/SARibbon/importSARibbonBarLib.pri)
O processo de compilação do qmake irá gerar a pasta bin_qtx.x_xx em SARibbon, e os arquivos de biblioteca e arquivos dll estão nesta pasta, e importSARibbonBarLib.pri
irá referenciar automaticamente as bibliotecas nesta pasta
Neste ponto, o diretório do seu projeto está assim:
|-[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]
Recomenda-se usar esta biblioteca após a execução de install
.
Método para introduzir o cmake:
find_package (SARibbonBar REQUIRED)
...
target_link_libraries ({your_target_name} PUBLIC SARibbonBar::SARibbonBar)
Se find_package
não conseguir encontrar SARibbonBar
, você precisará informar ao seu projeto cmake o local de instalação do SARibbon
.
set(SARibbonBar_DIR "[your SARibbonBar installation root directory]/lib/cmake")
Se durante a compilação a opção SARIBBON_INSTALL_IN_CURRENT_DIR
estiver definida como ON
(padrão), uma pasta bin_qt{Qt version}_{MSVC/GNU}_x{32/64}
será gerada no diretório raiz do projeto SARibbon como o diretório de instalação. Isto é para alinhar com o qmake e facilitar a instalação de múltiplas versões diferentes do Qt e compiladores em um único sistema operacional. Caso contrário, no Windows, ele será instalado na pasta C:Program FilesSARibbonBar
por padrão.
Para referência sobre a introdução do SARibbon via cmake, consulte src/example/MainWindowExample/CMakeLists.txt
.
Para obter detalhes, consulte a documentação: SARibbon Building
Ribbon é uma combinação da barra de menu e da barra de ferramentas, e exibido através de um controle de aba, Ribbon não pode ser simplesmente substituído por Tab+Toolbar, envolvendo muitos detalhes, SARibbon
refere-se ao estilo de nomenclatura da interface MFC Ribbon no design , a página da guia é chamada Category
, e há vários pannel
em cada Category
, abaixo dos quais gerencia o botão de ferramentas, pannel
é um pouco como o tradicional Toolbar
, com uma hierarquia conforme mostrado na imagem abaixo, e esses nomes fazem referência à faixa de opções do MFC classe de interface
Alguns substantivos comuns são explicados abaixo
Category , representando o que um rótulo apresenta, correspondente a SARibbonCategory
.
Categoria de Contexto , esta é uma categoria especial. Não é exibido normalmente. Você precisa julgar se deve ser exibido com base no contexto. A forma mais comum é que após inserir uma imagem no Word, apareça um rótulo relacionado à modificação da imagem. Se nenhuma imagem for selecionada, o rótulo desaparecerá. Esta é a categoria de contexto, correspondente a SARibbonContextCategory
.
Pannel , esta é uma coleção de menus, como uma barra de ferramentas, correspondente ao SARibbonPannel
Botão do aplicativo , este é o botão mais à esquerda na barra de guias (a palavra é o botão do arquivo correspondente). Este botão irá acionar algumas páginas ou menus especiais, correspondentes a SARibbonApplicationButton
, que podem ser ocultados.
Barra de acesso rápido , uma barra de ferramentas simples na parte superior para colocar ações comuns correspondentes a SARibbonQuickAccessBar
.
Gallery Control , este é o controle de fita mais atraente. Ele exibe as funções com imagens intuitivas, e até algumas renderizações são feitas em tempo real de acordo com o contexto. Um exemplo típico é a seleção de estilo na palavra office. correspondente a SARibbonGallery
.
O layout do SARibbonBar é mostrado na figura abaixo
Nota: Diferentes esquemas de layout afetam o posicionamento da
Category
eQuick Access Bar
Para usar SARibbon em MainWindow, você precisa substituir QMainWindow
por SARibbonMainWindow
, que modifica a forma como QMainWindow
renderiza a barra de menus
Observe que se você usar um arquivo UI, você deve excluir o menu do arquivo UI, caso contrário, poderá causar algumas exceções
O código de exemplo é o seguinte:
# include " SARibbonMainWindow.h "
class MainWindow : public SARibbonMainWindow
{
Q_OBJECT
public:
MainWindow (QWidget* par = nullptr );
...
}
SARibbonMainWindow
também suporta renderização em modo normal com o seguinte construtor:
SARibbonMainWindow (QWidget *parent = nullptr , bool useRibbon = true );
Se o segundo parâmetro for definido como falso, ele usará o modo normal da barra de ferramentas do menu, esta interface é reservada para alguns projetos que precisam ser capazes de alternar entre a faixa de opções e as cenas da barra de ferramentas do menu clássico, o estado da faixa de opções e o estado clássico não suportam troca a quente , se precisar alternar, você pode definir um arquivo de configuração ou registro, passar false para o segundo parâmetro quando o aplicativo for reiniciado para entrar no modo clássico da barra de ferramentas do menu
SARibbonBar
pode ser usado em QWidget
ou QDialog
, veja o exemplo: src/example/WidgetWithRibbon
Tudo que você precisa fazer é usar SARibbonBar
como um widget normal
Primeiro, declare o ponteiro de SARibbonBar
no arquivo de cabeçalho
private:
Ui::Widget* ui;
SARibbonBar* mRibbonBar { nullptr };
Crie um SARibbonBar
no construtor do Widget, existe um layout QVBoxLayout
no arquivo ui do widget, coloque o SARibbonBar
bem no topo, e ao mesmo tempo, desde o modo QWidget, não há necessidade de exibir o título, você pode chamar o método SARibbonBar::setTitleVisible
para ocultar o título. applicationbutton também pode ser cancelado em QWidget via SARibbonBar::setApplicationButton
se não for necessário e, finalmente, como o tema de SARibbonBar é definido no método SARibbonMainWindow
, o tema pode ser definido em QWidget por meio da função 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 );
}
Aqui está o que parece:
A ordem de criação de uma faixa de opções é criar uma categoria, depois um painel e, finalmente, um botão de ferramenta (ação)
Use SARibbonBar::addCategoryPage
para adicionar uma categoria ao SARibbonBar, SARibbonCategory::addPannel
para adicionar uma categoria e SARibbonPannel::addAction
para adicionar uma ação ao Pannel
O código a seguir demonstra um exemplo de adição de uma ação:
// 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);
A operação acima adiciona um botão e o efeito é mostrado na figura a seguir:
Você também pode sair diretamente do SARibbonCategory
e adicioná-lo ao painel, e o código a seguir será igual ao acima:
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);
Diferentes estilos de layout podem ser combinados através de addLargeAction
, addMediumAction
, addSmallAction
. Para obter detalhes, consulte:
./src/example/MainWindowExample/mainwindow.cpp
A chamada Categoria de Contexto refere-se ao rótulo/grupo de rótulos que aparece apenas em circunstâncias especiais. Por exemplo, quando o office word seleciona uma imagem, a categoria de contexto de edição de imagem aparecerá, conforme mostrado na figura a seguir:
A classe correspondente à categoria de contexto no SARibbon é SARibbonContextCategory
A categoria de contexto geralmente é criada quando o programa é inicializado. Geralmente fica oculto e exibido quando precisa ser exibido. A categoria de contexto é criada da seguinte forma:
Como a Categoria de Contexto precisa ser invocada quando usada, é uma boa opção salvá-la com uma variável de membro. Claro, você também pode percorrer a pesquisa ( SARibbonBar::contextCategoryList
pode enumerar todos SARibbonContextCategory
).
arquivo de cabeçalho:
SARibbonContextCategory* m_contextCategory;
arquivo 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
......
O SARibbonCategory
criado por SARibbonContextCategory
é gerenciado por SARibbonContextCategory
. Somente quando SARibbonContextCategory
é exibido, o SARibbonCategory
gerenciado é exibido
Nota: SARibbonContextCategory
não é um widget.
Para exibir um contexto, use
SARibbonBar::showContextCategory
/ SARibbonBar::hideContextCategory
:
void MainWindow::onShowContextCategory ( bool on)
{
if (on) {
this -> ribbonBar ()-> showContextCategory (m_contextCategory);
} else {
this -> ribbonBar ()-> hideContextCategory (m_contextCategory);
}
}
**Nota: ** se você deseja excluir contextCategory
, você precisa chamar SARibbonBar::destroyContextCategory
em vez de excluir diretamente. Depois de chamar SARibbonBar::destroyContextCategory
, você não precisa excluir o ponteiro de ContextCategory.
ContextCategory diferente tem estilo diferente. Para obter detalhes, consulte: [Estilo SARibbon](#SARibbon style) e [Exibir comparação em estilos diferentes](#Exibir comparação em estilos diferentes).
Há um botão especial e óbvio chamado ApplicationButton
no canto superior esquerdo da interface da faixa de opções. Este botão geralmente é usado para acessar menus. SARibbonBar cria ApplicationButton
por padrão durante a construção. Seu texto pode ser definido das seguintes maneiras:
SARibbonBar* ribbon = ribbonBar();
ribbon-> applicationButton ()->setText(( " File " ));
O applicationButton padrão herda de SARibbonApplicationButton
e SARibbonApplicationButton
herda de QPushButton
, para que você possa executar todas as operações em QPushButton
. Claro, se você quiser definir seu próprio Button como um applicationButton, basta chamar a função SARibbonBar::setApplicationButton
.
QuickAccessBar é a barra de ferramentas rápida no canto superior esquerdo e rightButtonGroup é a barra de ferramentas rápida no canto superior direito. No modo escritório, é dividido nos lados esquerdo e direito. No modo WPS, os lados esquerdo e direito serão combinados e colocados à direita.
Em SARibbon
:
SARibbonQuickAccessBar
.SARibbonQuickAccessBar
. Durante a inicialização, SARibbonBar
criará QuickAccessBar e RightButtonGroup por padrão. Seus ponteiros podem ser obtidos através de SARibbonBar::quickAccessBar
e SARibbonBar::rightButtonGroup
. Os exemplos são os seguintes:
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
suporta alternar entre quatro estilos de faixa de opções. Aqui, o estilo de faixa de office
e WPS
é mencionado. A troca de estilo online pode ser realizada por meio de void SARibbonBar::setRibbonStyle(RibbonStyle v)
.
O modo office
é o modo de faixa de opções mais comum, a tab
e a barra de título ocupam mais espaço, o modo de faixa de opções projetado pelo WPS
foi aprimorado, reduz a altura da faixa de opções, o rótulo e a barra de título são definidos juntos, de modo a reduza a altura de uma barra de título, use efetivamente o espaço vertical e, ao mesmo tempo, o layout dos botões do painel seja alterado de no máximo 3 para 2, comprimindo ainda mais o espaço vertical
Comparação de capturas de tela entre a interface de palavras do escritório e a interface de palavras do WPS
Na tela normal, o estilo WPS reduzirá a altura vertical em pelo menos 30 pixels em comparação com o estilo Office, o que equivale a economizar quase 3% do espaço vertical em comparação com a tela 1920*1080.
No SARibbon, aquele com a barra de título é denominado Loose, e os elementos do layout solto são organizados conforme mostrado abaixo:
Este layout é consistente com o layout padrão do Office
No SARibbon, o layout com barra de título e guia é chamado de layout compacto, e os elementos do layout compacto são organizados da seguinte forma:
SARibbonBar fornece uma função setRibbonStyle
que define o estilo de layout atual, e enumerar SARibbonBar::RibbonStyle
define quatro esquemas de layout:
SARibbonBar::RibbonStyleLooseThreeRow
solto com três linhas (a versão v0.x é SARibbonBar::OfficeStyle
) SARibbonBar::RibbonStyleLooseTwoRow
solto com duas linhas (a versão v0.x é SARibbonBar::OfficeStyleTwoRow
) SARibbonBar::RibbonStyleCompactThreeRow
Compacto com três linhas (a versão v0.x é SARibbonBar::WpsLiteStyle
) SARibbonBar::RibbonStyleCompactTwoRow
Compacto com duas linhas (a versão v0.x é SARibbonBar::WpsLiteStyleTwoRow
) A função SARibbonBar::setEnableWordWrap
permite que você controle se o texto do SARibbonBar é quebrado ou não, a altura do SARibbonBar
é fixa e se o texto é quebrado ou não afetará o tamanho da exibição do ícone, portanto, se você quiser que o ícone para parecer maior, você pode definir o texto para não quebrar
No estilo de layout SARibbonBar::RibbonStyleCompactTwoRow
, o texto sem quebra automática é exibido da seguinte forma:
SARibbonBar::RibbonStyleCompactTwoRow
紧凑结构,2行模式把文字设置为不换行后( SARibbonBar::setEnableWordWrap(false)
)的效果如下
Quando o texto SARibbonBar é definido como sem quebra automática, o espaço de exibição do ícone fica maior
SARibbonPannel
fornece três métodos para adicionar ação:
addLargeAction
addMediumAction
addSmallAction
No painel padrão, uma ação (botão) possui três modos de layout. Tomando o office word como exemplo, os três layouts do painel são na verdade o número de linhas ocupadas:
SARibbonPannelItem::RowProportion
é usado para representar o número de linhas que cada formulário ocupa no painel. É comumente usado no layout do painel. Esta enumeração é definida da seguinte forma:
/* *
* @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 ação gerenciada em SARibbonPannel
terá uma propriedade privada ( SARibbonPannelItem::RowProportion
). Esta propriedade determina o layout desta ação no painel.
SARibbonPannel
O modo de três linhas é o layout de painel tradicional, conforme mostrado na figura a seguir:
No modo de 3 linhas, existem três tipos de espaços reservados, que são grandes, médios e pequenos
O painel no modo de 3 linhas exibirá o título do painel na área Título do Painel e há outra área OptionAction. Esta área é usada para adicionar um gatilho especial a esta ação. Se OptionAction não estiver definido, esta área ficará oculta.
O modo de duas linhas é o método de layout aprimorado WPS, conforme mostrado na figura a seguir:
No modo de 2 linhas, os espaços reservados médios e pequenos (SARibbonPannelItem::RowProportion) são iguais e nenhuma distinção é feita.
No modo de 2 linhas, o painel não exibe o título.
A personalização da faixa de opções é um recurso da faixa de opções. Com referência à interface customizada do office e WPS, os usuários podem definir muito conteúdo para sua própria fita, ou até mesmo definir uma interface completamente diferente da original.
A seguir está a interface personalizada do office.
SARibbon refere-se à interface de escritório e WPS e encapsula a classe SARibbonCustomize**
fácil de usar, incluindo as cinco classes a seguir:
SARibbonCustomizeDialog
SARibbonCustomizeWidget
SARibbonCustomizeData
SARibbonActionsManager
SARibbonActionsManagerModel
Os usuários reais só podem usar SARibbonActionsManager
e SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
e outros usuários não os usarão normalmente.
SARibbonActionsManager
é usado para gerenciar QAction
, adicionar o QAction
que deseja personalizar ao SARibbonActionsManager
para gerenciamento e classificar QAction
para que possam ser exibidos em SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
.
SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
é uma janela de exibição específica. O SARibbonCustomizeDialog
encapsula o SARibbonCustomizeWidget
como uma caixa de diálogo. Se quiser integrá-lo à caixa de diálogo de configuração como o office, você pode usar o SARibbonCustomizeWidget
. O efeito do SARibbonCustomizeDialog
é mostrado na figura a seguir:
Veja como adicionar recursos personalizados.
Primeiro, defina SARibbonActionsManager
como a variável membro de MainWindow
.
// Define member variables in the MainWindow.h.
SARibbonActionsManager* m_ribbonActionMgr; // /< Manage all actions
Durante a inicialização do MainWindow
, um grande número de QAction
precisa ser criado. O objeto pai de QAction
é designado como MainWindow
. Além disso, será gerado o layout da faixa de opções, como adição de categoria, adição de painel e outras operações. Após a conclusão das operações acima, adicione as etapas a seguir para permitir que SARibbonActionsManager
gerencie automaticamente todos QAction
.
// Initialization of MainWindow and generation of QAction.
// Generate ribbon layout.
m_ribbonActionMgr = new SARibbonActionsManager(mainWinowPtr);
m_ribbonActionMgr-> autoRegisteActions (mainWinowPtr);
A função principal autoRegisteActions
de SARibbonActionsManager
pode percorrer todos os subobjetos em SARibbonMainWindow
, localizar e registrar ações e percorrer todos SARibbonCategory
. As ações em SARibbonCategory
são classificadas de acordo com o nome do título de SARibbonCategory
. Esta função também registra as ações em SARibbonMainWindow
, mas não em nenhuma categoria, como tags 'NotInRibbonCategoryTag'. O nome padrão é 'not in ribbon'.
Para chamar SARibbonCustomizeDialog da seguinte maneira:
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 da MainWindow ser gerada, o conteúdo personalizado precisa ser carregado. Portanto, a seguinte instrução deve ser adicionada ao construtor:
// Constructor of MainWindow
sa_apply_customize_from_xml_file ( " customization.xml " , this , m_ribbonActionMgr);
sa_apply_customize_from_xml_file
é a função fornecida em SARibbonCustomizeWidget.h
. O conteúdo personalizado no arquivo de configuração é aplicado diretamente na MainWindow.
Desta forma, o software será carregado de acordo com o arquivo de configuração sempre que for iniciado.
github - https://github.com/czyt1988/data-workbench
turismo rural - https://gitee.com/czyt1988/data-workbench
O código específico de geração da fita pode ser visto:
https://github.com/czyt1988/data-workbench/blob/master/src/APP/DAAppRibbonArea.cpp
Existem duas maneiras de se preparar para o problema da exibição da tela com alto DPI:
Qt::AA_EnableHighDpiScaling
para QApplication
na função principalEste atributo permite que o aplicativo detecte automaticamente a densidade de pixels da tela para obter escalonamento automático, como:
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
na função principal: QApplication::setHighDpiScaleFactorRoundingPolicy
Qt5.6 fornece Qt::AA_EnableHighDpiScaling
, mas não pode resolver completamente o problema de telas de alto DPI. Qt5.14 forneceu uma configuração de política de escalonamento de tela de alto dpi chamada QApplication::setHighDpiScaleFactorRoundingPolicy
, também precisa ser definida na função principal, por exemplo:
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);
......
}
As pessoas costumam dar feedback de que, depois de usar o SARibbonBar, as teclas de atalho das páginas de guias inativas não respondem e apenas as teclas de atalho das páginas de guias ativadas respondem. Se estiver no modo de barra de ferramentas tradicional, a tecla de atalho permanecerá em vigor porque a barra de ferramentas onde a ação está localizada está sempre em primeiro plano. No entanto, se for SARibbonBar, a tecla de atalho no painel de ação ficará oculta e não terá efeito após ser ocultada. Se você deseja que a tecla de atalho tenha efeito independentemente de o Pannel estar oculto ou não, definindo a tecla de atalho ' A propriedade ShortContext 'para Qt::ApplicationShortcut
também é inválida. Neste caso, você pode criar manualmente a tecla de atalho no local onde criou a Categoria
exemplo:
ribbon build
...
QShortcut* shortCut = new QShortcut(QKeySequence(QLatin1String( " Ctrl+S " )), this );
connect (shortCut, &QShortcut::activated, this , [ actSave ]() {
actSave-> trigger ();
});