中文文档点击这里,QQ群:434014314
| Windows (2019, terbaru) | Linux ubuntu (20.04, terbaru) | Mac (11-terbaru) | |
|---|---|---|---|
| Qt5.12 | |||
| Qt5.13 | |||
| Qt5.14 | |||
| Qt5.15 | |||
| Qt6.0 | |||
| Qt6.1 | |||
| Qt6.2 | |||
| Qt6.3 | |||
| Qt6.4 | |||
| Qt6.5 | |||
| Qt6.6 |
Ini adalah Ribbon control di bawah kerangka Qt , yang menyediakan antarmuka yang mirip dengan perangkat lunak Microsoft Office. SARibbon cocok untuk perangkat lunak besar, perangkat lunak industri, dan UI perangkat lunak yang kompleks. SARibbon dirancang dengan mengacu pada gaya penamaan antarmuka Pita MFC, dan gaya antarmuka SARibbon mengacu pada antarmuka Pita perangkat lunak seri Microsoft Office dan perangkat lunak WPS, dan menggabungkan keunggulan keduanya. SARibbon adalah widget pita yang dapat menentukan berbagai gaya tema, dan dapat dengan cepat menentukan gaya tema yang Anda inginkan melalui qss. Untuk memfasilitasi pengembangan perangkat lunak besar, SARibbon merangkum beberapa kontrol fungsional yang umum digunakan, seperti Widget Warna





tema win7:
tema office2013:
tema office2016:
tema office2021:
tema gelap: 



Protokol MIT, dipersilakan semua orang untuk menggunakan dan memberikan komentar
gitee - https://gitee.com/czyt1988/SARibbon
github - https://github.com/czyt1988/SARibbon
SARibbon menyediakan metode pembangunan qmake dan cmake, dan menyediakan file gabungan SARibbon.h dan SARibbon.cpp untuk penyematan statis ke dalam satu proyek
SARibbonmendukung perpustakaan pihak ketiga QWindowKit Pada saat yang sama, SARibbon juga mendukung solusi sederhana tanpa bingkai. Jika Anda memerlukan dukungan jendela asli untuk sistem operasi, seperti pemangkasan tepi setelah Windows 7 dan memaksimalkan efek melayang tombol di Windows 11, disarankan untuk mengaktifkan Perpustakaan QWindowKit, Perpustakaan QWindowKit dapat menyelesaikan masalah pergerakan multi layar dengan lebih baik

Jika ingin mengandalkan Perpustakaan QWindowKit, perlu dikompilasi terlebih dahulu Perpustakaan QWindowKit, QWindowKit Sebagai submodul proyek SARibbon, jika parameter '-- rekursif' tidak disertakan dalam 'git clone', perintah 'pembaruan submodul' perlu dijalankan:
git submodule update --init --recursiveUntuk detail proses pembangunan, lihat dokumen: Building SARibbon
SARibbon menyediakan file SARibbon.h gabungan dan file SARibbon.cpp , Anda hanya perlu mengimpor kedua file ini ke proyek Anda sendiri, dan pada saat yang sama mengimpor file sumber daya dan file perpustakaan pihak ketiga untuk digunakan, tidak perlu mengkompilasi ke perpustakaan dinamis atau perpustakaan statis, Anda dapat merujuk ke contoh StaticExample (terletak di src/example/StaticExample ), penyematan statis akan digunakan ke SARibbon.h , SARibbon.cpp , SARibbon.pri , SARibbonBar/resource.qrc , dan SARibbonBar/3rdparty , SARibbonBar/resource dua folder:
Direktori proyek Anda akan terlihat seperti ini:
|-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
Untuk melakukan kompilasi dengan qmake, Anda dapat mengikuti langkah-langkah di bawah ini:
SARibbon.h , SARibbon.cpp , SARibbon.pri ke direktori proyek AndaSARibbonBar di direktori proyek Andasrc/SARibbonBar/resource.qrc dalam kode sumber ke folder SARibbonBar di direktori proyek Andaresource di bawah src/SARibbonBar ke folder SARibbonBar di direktori proyek AndaSARibbon.pri ke file pro proyek Anda, misalnya include($$PWD/SARibbon.pri) Jika menggunakan cmake, lihat cara penulisan cmake pada contoh StaticExample (terletak di src/example/StaticExample )
Setelah kompilasi selesai, impor SARibbon sebagai berikut:
Jika Anda menggunakan qmake, Anda cukup menyalin file berikut ke proyek Anda dalam struktur direktori setelah kompilasi selesai
Buat folder pihak ke-3 di proyek Anda terlebih dahulu, lalu salin seluruh folder SARibbon, sudah ada beberapa file pri di dalam SARibbon yang memungkinkan Anda dengan mudah mengimpor proyek ke direktori Anda sendiri, dan file ./importSARibbonBarLib.pri digunakan untuk impor perpustakaan SARibbon
Setelah menyelesaikan proses banding, Anda dapat menambahkan pernyataan berikut ke file pro proyek Qt Anda
include( $$ PWD/3rdparty/SARibbon/importSARibbonBarLib.pri) Proses kompilasi qmake akan menghasilkan folder bin_qtx.x_xx di bawah SARibbon, dan file perpustakaan serta file dll ada di folder ini, dan importSARibbonBarLib.pri akan secara otomatis mereferensikan perpustakaan di folder ini
Pada titik ini, direktori proyek Anda terlihat seperti ini:
|-[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]
Disarankan untuk menggunakan perpustakaan ini setelah eksekusi install .
Metode untuk memperkenalkan cmake:
find_package (SARibbonBar REQUIRED)
...
target_link_libraries ({your_target_name} PUBLIC SARibbonBar::SARibbonBar) Jika find_package tidak dapat menemukan SARibbonBar , Anda perlu memberi tahu proyek cmake Anda tentang lokasi instalasi SARibbon .
set(SARibbonBar_DIR "[your SARibbonBar installation root directory]/lib/cmake")
Jika selama kompilasi, opsi SARIBBON_INSTALL_IN_CURRENT_DIR diatur ke ON (default), folder bin_qt{Qt version}_{MSVC/GNU}_x{32/64} akan dibuat di bawah direktori akar proyek SARibbon sebagai direktori instalasi. Hal ini untuk menyelaraskan dengan qmake dan memfasilitasi instalasi beberapa versi Qt dan kompiler yang berbeda pada satu sistem operasi. Jika tidak, di Windows, ini akan diinstal di folder C:Program FilesSARibbonBar secara default.
Untuk referensi tentang memperkenalkan SARibbon melalui cmake, lihat src/example/MainWindowExample/CMakeLists.txt .
Untuk detailnya, lihat dokumentasi: SARibbon Building
Ribbon adalah kombinasi dari menu bar dan toolbar, dan ditampilkan melalui kontrol tab, Ribbon tidak bisa begitu saja diganti dengan Tab+Toolbar, melibatkan banyak detail, SARibbon mengacu pada gaya penamaan antarmuka Ribbon MFC dalam desain , halaman tab disebut Category , dan ada beberapa pannel di bawah masing-masing Category , di bawahnya yang mengelola tombol alat, pannel agak mirip dengan Toolbar tradisional, dengan hierarki seperti yang ditunjukkan pada gambar di bawah, dan nama-nama ini merujuk pada Kelas antarmuka pita MFC

Beberapa kata benda umum dijelaskan di bawah ini
Kategori , mewakili apa yang dihadirkan label, sesuai dengan SARibbonCategory .
Kategori Konteks , ini adalah kategori khusus. Itu tidak ditampilkan secara normal. Anda perlu menilai apakah itu harus ditampilkan berdasarkan konteksnya. Cara yang paling umum adalah setelah menyisipkan gambar di Word, akan muncul label terkait modifikasi gambar. Jika tidak ada gambar yang dipilih, labelnya akan hilang. Ini adalah kategori konteks, sesuai dengan SARibbonContextCategory .
Pannel , Ini adalah kumpulan menu, seperti Toolbar, yang sesuai dengan SARibbonPannel
Tombol Aplikasi , ini adalah tombol paling kiri di bilah tab (kata adalah tombol file yang sesuai). Tombol ini akan memicu beberapa halaman atau menu khusus, terkait dengan SARibbonApplicationButton , yang dapat disembunyikan.
Quick Access Bar , toolbar sederhana di bagian atas untuk menempatkan tindakan umum yang terkait dengan SARibbonQuickAccessBar .
Kontrol Galeri , ini adalah kontrol pita yang paling menarik perhatian. Ini menampilkan fungsi dengan gambar intuitif, dan bahkan beberapa rendering dilakukan secara real time sesuai dengan konteksnya. Contoh tipikalnya adalah pemilihan gaya pada kata kantor. sesuai dengan SARibbonGallery .
Tata letak SARibbonBar ditunjukkan pada gambar di bawah

Catatan: Skema tata letak yang berbeda mempengaruhi penempatan
CategorydanQuick Access Bar
Untuk menggunakan SARibbon di MainWindow, Anda perlu mengganti QMainWindow dengan SARibbonMainWindow , yang mengubah cara QMainWindow merender menubar
Perhatikan bahwa jika Anda menggunakan file UI, Anda harus menghapus menu file UI, jika tidak maka dapat menyebabkan beberapa pengecualian
Contoh kodenya adalah sebagai berikut:
# include " SARibbonMainWindow.h "
class MainWindow : public SARibbonMainWindow
{
Q_OBJECT
public:
MainWindow (QWidget* par = nullptr );
...
} SARibbonMainWindow juga mendukung rendering mode normal dengan konstruktor berikut:
SARibbonMainWindow (QWidget *parent = nullptr , bool useRibbon = true );Jika parameter kedua disetel ke false, maka akan menggunakan mode bilah alat menu normal, antarmuka ini dicadangkan untuk beberapa proyek yang perlu dapat beralih antara adegan bilah alat menu pita dan klasik, status pita dan status klasik tidak mendukung peralihan panas , jika Anda perlu beralih, Anda dapat mengatur file konfigurasi atau registri, meneruskan false ke parameter kedua saat aplikasi dimulai ulang untuk masuk ke mode toolbar menu klasik
SARibbonBar dapat digunakan pada QWidget atau QDialog , lihat contohnya: src/example/WidgetWithRibbon
Yang perlu Anda lakukan hanyalah menggunakan SARibbonBar sebagai widget biasa
Pertama, deklarasikan pointer SARibbonBar di file header
private:
Ui::Widget* ui;
SARibbonBar* mRibbonBar { nullptr }; Buat SARibbonBar di konstruktor Widget, ada layout QVBoxLayout di file ui widget, letakkan SARibbonBar di bagian paling atas, dan pada saat yang sama, karena mode QWidget, tidak perlu menampilkan judul, Anda dapat memanggil metode SARibbonBar::setTitleVisible untuk menyembunyikan judul. applicationbutton juga dapat dibatalkan di QWidget melalui SARibbonBar::setApplicationButton jika tidak diperlukan, dan terakhir karena tema SARibbonBar disetel dalam metode SARibbonMainWindow , tema dapat disetel di QWidget melalui fungsi 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 );
}Berikut tampilannya:

Urutan pembuatan pita adalah membuat Kategori, lalu Pannel, dan terakhir tombol alat (aksi)
Gunakan SARibbonBar::addCategoryPage untuk menambahkan Kategori ke SARibbonBar, SARibbonCategory::addPannel untuk menambahkan Kategori, dan SARibbonPannel::addAction untuk menambahkan tindakan ke Pannel
Kode berikut menunjukkan contoh penambahan tindakan:
// 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);Operasi di atas menambahkan tombol, dan efeknya ditunjukkan pada gambar berikut:

Anda juga dapat langsung keluar dari SARibbonCategory dan menambahkannya ke pannel, dan kode berikut akan terlihat sama seperti di atas:
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); Gaya tata letak yang berbeda dapat digabungkan melalui addLargeAction , addMediumAction , addSmallAction . Untuk detailnya, lihat:
./src/example/MainWindowExample/mainwindow.cpp
Yang disebut Kategori Konteks mengacu pada label/grup label yang hanya muncul dalam keadaan khusus. Misalnya ketika office word memilih gambar maka akan muncul Kategori Konteks pengeditan gambar, seperti terlihat pada gambar berikut:

Kelas yang sesuai dengan Kategori Konteks di SARibbon adalah SARibbonContextCategory
Kategori Konteks biasanya dibuat ketika program diinisialisasi. Biasanya disembunyikan dan ditampilkan saat perlu ditampilkan. Kategori Konteks dibuat sebagai berikut:
Karena Kategori Konteks perlu dipanggil saat digunakan, sebaiknya simpan dengan variabel anggota. Tentu saja, Anda juga dapat menelusuri pencarian ( SARibbonBar::contextCategoryList dapat menghitung semua SARibbonContextCategory ).
berkas tajuk:
SARibbonContextCategory* m_contextCategory;berkas 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
...... SARibbonCategory yang dibuat oleh SARibbonContextCategory dikelola oleh SARibbonContextCategory . Hanya ketika SARibbonContextCategory ditampilkan, SARibbonCategory terkelola akan ditampilkan
Catatan: SARibbonContextCategory bukan widget.
Untuk menampilkan penggunaan konteks
SARibbonBar::showContextCategory / SARibbonBar::hideContextCategory :
void MainWindow::onShowContextCategory ( bool on)
{
if (on) {
this -> ribbonBar ()-> showContextCategory (m_contextCategory);
} else {
this -> ribbonBar ()-> hideContextCategory (m_contextCategory);
}
} **Catatan: ** jika Anda ingin menghapus contextCategory , Anda perlu memanggil SARibbonBar::destroyContextCategory alih-alih menghapus secara langsung. Setelah memanggil SARibbonBar::destroyContextCategory , Anda tidak perlu menghapus penunjuk ContextCategory.
Konteks yang berbedaKategori memiliki gaya yang berbeda. Untuk detailnya, lihat: [SARibbon style](#SARibbon style) dan [Tampilkan perbandingan dalam gaya berbeda](#Tampilkan perbandingan dalam gaya berbeda).
Ada tombol khusus dan jelas yang disebut ApplicationButton di sudut kiri atas antarmuka pita. Tombol ini umumnya digunakan untuk memanggil menu. SARibbonBar membuat ApplicationButton secara default selama konstruksi. Teksnya dapat diatur dengan cara berikut:
SARibbonBar* ribbon = ribbonBar();
ribbon-> applicationButton ()->setText(( " File " )); applicationButton default mewarisi dari SARibbonApplicationButton , dan SARibbonApplicationButton mewarisi dari QPushButton , sehingga Anda dapat melakukan semua operasi di QPushButton . Tentu saja, jika Anda ingin mengatur Button Anda sendiri sebagai applicationButton, Anda cukup memanggil fungsi SARibbonBar::setApplicationButton .
QuickAccessBar adalah toolbar cepat di sudut kiri atas dan rightButtonGroup adalah toolbar cepat di sudut kanan atas. Dalam mode kantor, terbagi menjadi sisi kiri dan kanan. Dalam mode WPS, sisi kiri dan kanan akan digabungkan dan ditempatkan di sebelah kanan.

Di SARibbon :
SARibbonQuickAccessBar .SARibbonQuickAccessBar . Selama inisialisasi, SARibbonBar akan membuat QuickAccessBar dan RightButtonGroup secara default. Petunjuknya dapat diperoleh melalui SARibbonBar::quickAccessBar dan SARibbonBar::rightButtonGroup . Contohnya adalah sebagai berikut:
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 mendukung peralihan di antara empat gaya pita. Di sini, gaya pita office dan WPS dirujuk. Peralihan gaya online dapat diwujudkan melalui void SARibbonBar::setRibbonStyle(RibbonStyle v) .
Mode office adalah mode pita yang paling umum, tab dan bilah judul menempati lebih banyak ruang, mode pita yang dirancang oleh WPS telah ditingkatkan, mengurangi tinggi pita, label dan bilah judul diatur bersama, sehingga dapat mengurangi tinggi bilah judul, menggunakan ruang vertikal secara efektif, dan pada saat yang sama, tata letak tombol panel diubah dari maksimum 3 menjadi 2, yang semakin mengompresi ruang vertikal
Perbandingan tangkapan layar antara antarmuka kata Office dan antarmuka kata WPS


Di bawah layar normal, gaya WPS akan mengurangi tinggi vertikal setidaknya 30 piksel dibandingkan dengan gaya Office, yang setara dengan menghemat hampir 3% ruang vertikal dibandingkan dengan layar 1920*1080.
Di SARibbon, yang memiliki bilah judul disebut Longgar, dan elemen tata letak longgar disusun seperti yang ditunjukkan di bawah ini:

Tata letak ini konsisten dengan tata letak default Office
Di SARibbon, tata letak dengan bilah judul dan tab disebut tata letak ringkas, dan elemen tata letak ringkas disusun sebagai berikut:

SARibbonBar menyediakan fungsi setRibbonStyle yang mendefinisikan gaya tata letak saat ini, dan menghitung SARibbonBar::RibbonStyle mendefinisikan empat skema tata letak:
SARibbonBar::RibbonStyleLooseThreeRow Longgar Dengan Tiga Baris (Versi v0.x adalah SARibbonBar::OfficeStyle ) 
SARibbonBar::RibbonStyleLooseTwoRow Longgar Dengan Dua Baris (Versi v0.x adalah SARibbonBar::OfficeStyleTwoRow ) 
SARibbonBar::RibbonStyleCompactThreeRow Compact Dengan Tiga Baris (Versi v0.x adalah SARibbonBar::WpsLiteStyle ) 
SARibbonBar::RibbonStyleCompactTwoRow Kompak Dengan Dua Baris (Versi v0.x adalah SARibbonBar::WpsLiteStyleTwoRow ) 
Fungsi SARibbonBar::setEnableWordWrap memungkinkan Anda mengontrol apakah teks SARibbonBar terbungkus atau tidak, tinggi SARibbonBar tetap, dan apakah teks terbungkus atau tidak akan memengaruhi ukuran tampilan ikon, jadi jika Anda menginginkan ikon agar terlihat lebih besar, Anda dapat mengatur teks agar tidak terbungkus
Dalam gaya tata letak SARibbonBar::RibbonStyleCompactTwoRow , teks tanpa pembungkus ditampilkan sebagai berikut:
SARibbonBar::RibbonStyleCompactTwoRow紧凑结构,2行模式把文字设置为不换行后( SARibbonBar::setEnableWordWrap(false) )的效果如下

Ketika teks SARibbonBar diatur ke non-pembungkus, ruang tampilan ikon menjadi lebih besar
SARibbonPannel menyediakan tiga metode untuk menambahkan tindakan:
addLargeActionaddMediumActionaddSmallActionDi panel standar, tindakan (tombol) memiliki tiga mode tata letak. Mengambil contoh kata kantor, tiga tata letak pannel sebenarnya adalah jumlah baris yang ditempati:

SARibbonPannelItem::RowProportion digunakan untuk mewakili jumlah baris yang ditempati setiap formulir di pannel. Ini biasanya digunakan dalam tata letak panel. Pencacahan ini didefinisikan sebagai berikut:
/* *
* @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.
}; Setiap tindakan yang dikelola di SARibbonPannel akan memiliki properti pribadi ( SARibbonPannelItem::RowProportion ). Properti ini menentukan tata letak tindakan ini di panel.
SARibbonPannel Mode tiga garis adalah tata letak pannel tradisional, seperti yang ditunjukkan pada gambar berikut:

Dalam mode 3 baris, terdapat tiga jenis placeholder, yaitu besar, sedang, dan kecil
Pannel pada mode 3 baris akan menampilkan judul pannel pada area Pannel Title, dan terdapat area OptionAction lainnya. Area ini digunakan untuk menambahkan pemicu khusus pada tindakan ini. Jika OptionAction tidak disetel, area ini akan disembunyikan.
Mode dua baris adalah metode tata letak WPS yang ditingkatkan, seperti yang ditunjukkan pada gambar berikut:

Dalam mode 2 baris, placeholder menengah dan kecil (SARibbonPannelItem::RowProportion) adalah sama, dan tidak ada perbedaan yang dibuat.
Dalam mode 2 baris, panel tidak menampilkan judul.
Kustomisasi pita adalah fitur pita. Dengan mengacu pada antarmuka kustom Office dan WPS, pengguna dapat menentukan banyak konten untuk pita mereka sendiri, atau bahkan menentukan antarmuka yang benar-benar berbeda dari yang asli.
Berikut ini adalah antarmuka khusus Office.

SARibbon mengacu pada antarmuka Office dan WPS, dan merangkum kelas SARibbonCustomize** yang mudah digunakan, termasuk lima kelas berikut:
SARibbonCustomizeDialogSARibbonCustomizeWidgetSARibbonCustomizeDataSARibbonActionsManagerSARibbonActionsManagerModel
Pengguna sebenarnya hanya dapat menggunakan SARibbonActionsManager dan SARibbonCustomizeDialog / SARibbonCustomizeWidget , dan pengguna lain tidak akan menggunakannya secara normal.
SARibbonActionsManager digunakan untuk mengelola QAction , menambahkan QAction yang ingin disesuaikan ke SARibbonActionsManager untuk pengelolaan, dan mengklasifikasikan QAction agar dapat ditampilkan di SARibbonCustomizeDialog / SARibbonCustomizeWidget .
SARibbonCustomizeDialog / SARibbonCustomizeWidget adalah jendela tampilan tertentu. SARibbonCustomizeDialog merangkum SARibbonCustomizeWidget sebagai kotak dialog. Jika Anda ingin mengintegrasikannya ke dalam kotak dialog konfigurasi seperti Office, Anda dapat menggunakan SARibbonCustomizeWidget . Efek SARibbonCustomizeDialog ditunjukkan pada gambar berikut:

Berikut cara menambahkan fitur khusus.
Pertama, tentukan SARibbonActionsManager sebagai variabel anggota MainWindow .
// Define member variables in the MainWindow.h.
SARibbonActionsManager* m_ribbonActionMgr; // /< Manage all actions Selama inisialisasi MainWindow , sejumlah besar QAction perlu dibuat. Objek induk QAction ditetapkan sebagai MainWindow . Selain itu, tata letak pita akan dihasilkan, seperti penambahan kategori, penambahan panel, dan operasi lainnya. Setelah operasi di atas selesai, tambahkan langkah-langkah berikut untuk membiarkan SARibbonActionsManager mengelola semua QAction secara otomatis.
// Initialization of MainWindow and generation of QAction.
// Generate ribbon layout.
m_ribbonActionMgr = new SARibbonActionsManager(mainWinowPtr);
m_ribbonActionMgr-> autoRegisteActions (mainWinowPtr); Fungsi utama autoRegisteActions dari SARibbonActionsManager dapat melintasi semua subobjek di bawah SARibbonMainWindow , menemukan dan mendaftarkan tindakan, dan melintasi semua SARibbonCategory . Tindakan dalam SARibbonCategory diklasifikasikan menurut nama judul SARibbonCategory . Fungsi ini juga mendaftarkan tindakan di bawah SARibbonMainWindow , tetapi tidak di bawah kategori apa pun, sebagai tag 'NotInRibbonCategoryTag', Nama defaultnya adalah 'tidak ada di pita'.
Untuk memanggil SARibbonCustomizeDialog sebagai berikut:
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
}Sebelum MainWindow dibuat, konten yang disesuaikan perlu dimuat. Oleh karena itu, pernyataan berikut harus ditambahkan ke konstruktor:
// Constructor of MainWindow
sa_apply_customize_from_xml_file ( " customization.xml " , this , m_ribbonActionMgr); sa_apply_customize_from_xml_file adalah fungsi yang disediakan di SARibbonCustomizeWidget.h . Konten yang disesuaikan dalam file konfigurasi langsung diterapkan di MainWindow.
Dengan cara ini, perangkat lunak akan dimuat sesuai dengan file konfigurasi setiap kali dijalankan.


github - https://github.com/czyt1988/data-workbench
gitee - https://gitee.com/czyt1988/data-workbench
Kode pembuatan pita spesifik dapat dilihat:
https://github.com/czyt1988/data-workbench/blob/master/src/APP/DAAppRibbonArea.cpp
Ada dua cara untuk bersiap menghadapi masalah tampilan layar DPI tinggi:
Qt::AA_EnableHighDpiScaling untuk QApplication di fungsi utamaAtribut ini memungkinkan aplikasi secara otomatis mendeteksi kepadatan piksel tampilan untuk mencapai penskalaan otomatis, seperti:
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 di fungsi utama: QApplication::setHighDpiScaleFactorRoundingPolicy Qt5.6 menyediakan Qt::AA_EnableHighDpiScaling , tetapi tidak dapat sepenuhnya menyelesaikan masalah layar DPI tinggi. Qt5.14 telah menyediakan pengaturan kebijakan penskalaan layar dpi tinggi yang disebut QApplication::setHighDpiScaleFactorRoundingPolicy , juga perlu diatur di fungsi utama, misalnya:
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);
......
} Orang sering memberikan masukan bahwa setelah menggunakan SARibbonBar, tombol pintasan halaman tab yang tidak aktif tidak merespons, dan hanya tombol pintasan halaman tab yang diaktifkan yang merespons. Jika dalam mode toolbar tradisional, tombol shortcut akan tetap berlaku karena toolbar tempat tindakan berada selalu berada di garis depan. Namun, jika itu adalah SARibbonBar, tombol pintasan di panel tindakan akan disembunyikan, dan tidak akan berpengaruh setelah disembunyikan, Jika Anda ingin tombol pintasan diterapkan terlepas dari apakah Pannel disembunyikan atau tidak, atur tombol pintasan' properti shortcutContext ke Qt::ApplicationShortcut juga tidak valid. Dalam hal ini, Anda dapat secara manual membuat tombol pintasan di tempat Anda membuat Kategori
contoh:
ribbon build
...
QShortcut* shortCut = new QShortcut(QKeySequence(QLatin1String( " Ctrl+S " )), this );
connect (shortCut, &QShortcut::activated, this , [ actSave ]() {
actSave-> trigger ();
});