中文文档点击这里,QQ群:434014314
ويندوز (2019، الأحدث) | لينكس أوبونتو (20.04، الأحدث) | ماك (11-الأحدث) | |
---|---|---|---|
Qt5.12 | |||
Qt5.13 | |||
Qt5.14 | |||
Qt5.15 | |||
Qt6.0 | |||
Qt6.1 | |||
Qt6.2 | |||
Qt6.3 | |||
Qt6.4 | |||
Qt6.5 | |||
Qt6.6 |
هذا هو عنصر Ribbon control
ضمن إطار عمل Qt
، والذي يوفر واجهة مشابهة لواجهة برنامج Microsoft Office. يعد SARibbon
مناسبًا للبرامج الكبيرة والبرامج الصناعية وواجهة المستخدم المعقدة للبرامج. تم تصميم SARibbon
بالرجوع إلى نمط التسمية لواجهة MFC Ribbon، ويشير نمط واجهة SARibbon
إلى واجهة Ribbon لبرامج سلسلة Microsoft Office وبرنامج WPS، ويجمع بين مزايا كليهما. SARibbon
عبارة عن أداة شريط يمكنها تحديد مجموعة متنوعة من أنماط السمات، ويمكنها تحديد نمط السمة المرغوب فيه بسرعة من خلال qss. لتسهيل تطوير البرامج الكبيرة، يقوم SARibbon
بتغليف بعض عناصر التحكم الوظيفية الشائعة الاستخدام، مثل Color Widgets
موضوع Win7: موضوع أوفيس 2013:
موضوع أوفيس 2016:
موضوع أوفيس 2021:
موضوع مظلم:
بروتوكول MIT، مرحب به للجميع لاستخدامه وإبداء التعليقات
جيتي - https://gitee.com/czyt1988/SARibbon
جيثب - https://github.com/czyt1988/SARibbon
يوفر SARibbon
كلاً من أساليب البناء qmake وcmake، ويوفر ملف SARibbon.h
و SARibbon.cpp
مدمجًا للتضمين الثابت في مشروع واحد
يدعم
SARibbon
مكتبة QWindowKit التابعة لجهات خارجية. وفي الوقت نفسه، يدعم أيضًا الحلول البسيطة بدون إطار. إذا كنت بحاجة إلى دعم النافذة الأصلية لنظام التشغيل، مثل تقليم الحواف بعد Windows 7 وتعظيم تأثير التمرير للأزرار في Windows 11، فمن المستحسن تمكين مكتبة QWindowKit، ويمكن لمكتبة QWindowKit أن تحل مشكلة حركة الشاشات المتعددة بشكل أفضل
إذا كنت تريد الاعتماد على مكتبة QWindowKit، فيجب تجميعها أولاً من مكتبة QWindowKit، QWindowKit باعتبارها وحدات فرعية لمشروع SARibbon، إذا لم يتم تضمين المعلمة "-- العودية" في "git clone"، فإن أمر "تحديث الوحدات الفرعية" يحتاج إلى تنفيذ:
git submodule update --init --recursive
للحصول على عملية البناء التفصيلية، راجع الوثيقة: بناء ساريبون
يوفر SARibbon دمج ملف SARibbon.h
وملف SARibbon.cpp
، ما عليك سوى استيراد هذين الملفين في مشروعك الخاص، وفي نفس الوقت استيراد ملفات الموارد وملفات مكتبة الطرف الثالث لاستخدامها، دون الحاجة إلى التجميع في مكتبات ديناميكية أو المكتبات الثابتة، يمكنك الرجوع إلى مثال StaticExample (الموجود في src/example/StaticExample
)، وسيتم استخدام التضمين الثابت في SARibbon.h
و SARibbon.cpp
و SARibbon.pri
و SARibbonBar/resource.qrc
و SARibbonBar/3rdparty
و SARibbonBar/resource
مجلدان:
سيبدو دليل المشروع الخاص بك كما يلي:
|-you-project-dir
| |-you-project.pro
| |-SARibbon.h
| |-SARibbon.cpp
| |-SARibbon.pri
| |-SARibbonBar
| |-resource.qrc
| |-resource(Directly copy the resource under SARibbonBar in its entirety)
| |-resource files
للتجميع باستخدام qmake، يمكنك اتباع الخطوات التالية:
SARibbon.h
و SARibbon.cpp
و SARibbon.pri
إلى دليل مشروعكSARibbonBar
في دليل المشروع الخاص بكsrc/SARibbonBar/resource.qrc
الموجود في الكود المصدري إلى مجلد SARibbonBar
في دليل مشروعكresource
ضمن src/SARibbonBar
إلى مجلد SARibbonBar
في دليل المشروع الخاص بكSARibbon.pri
إلى الملف الاحترافي لمشروعك، على سبيل المثال include($$PWD/SARibbon.pri)
إذا كنت تستخدم cmake، فارجع إلى طريقة الكتابة cmake لمثال StaticExample (الموجود في src/example/StaticExample
)
بعد اكتمال التجميع، قم باستيراد SARibbon كما يلي:
إذا كنت تستخدم qmake، فيمكنك ببساطة نسخ الملفات التالية إلى مشروعك في بنية الدليل بعد اكتمال التجميع
قم بإنشاء مجلد طرف ثالث في مشروعك أولاً، ثم انسخ مجلد SARibbon بأكمله، يوجد بالفعل العديد من ملفات pri داخل SARibbon والتي يمكن أن تسمح لك بسهولة باستيراد المشروع إلى الدليل الخاص بك، ويتم استخدام ملف ./importSARibbonBarLib.pri
لـ استيراد مكتبة SARibbon
بعد الانتهاء من عملية الاستئناف، يمكنك إضافة البيان التالي إلى ملف مشروع Qt pro الخاص بك
include( $$ PWD/3rdparty/SARibbon/importSARibbonBarLib.pri)
ستؤدي عملية تجميع qmake إلى إنشاء مجلد bin_qtx.x_xx ضمن SARibbon، وستكون ملفات المكتبة وملفات dll موجودة في هذا المجلد، وسيقوم importSARibbonBarLib.pri
تلقائيًا بالإشارة إلى المكتبات الموجودة في هذا المجلد
في هذه المرحلة، يبدو دليل مشروعك كما يلي:
|-[you-project-dir]
| |-you-project.pro
| |-[3rdparty]
| |-[SARibbon](Copy SARibbon in its entirety)
| |-importSARibbonBarLib.pri
| |-SARibbonBar.pri
| |-common.pri
| |-[bin_qtx.x.x_{MSVC/GNU}_x{32/64}]
| |-[src]
| | |-[SARibbonBar]
يوصى باستخدام هذه المكتبة بعد تنفيذ install
.
طريقة تقديم الكميك:
find_package (SARibbonBar REQUIRED)
...
target_link_libraries ({your_target_name} PUBLIC SARibbonBar::SARibbonBar)
إذا لم يتمكن find_package
من العثور على SARibbonBar
، فستحتاج إلى إبلاغ مشروع cmake الخاص بك بموقع تثبيت SARibbon
.
set(SARibbonBar_DIR "[your SARibbonBar installation root directory]/lib/cmake")
إذا تم تعيين خيار SARIBBON_INSTALL_IN_CURRENT_DIR
على ON
(افتراضي) أثناء الترجمة، فسيتم إنشاء مجلد bin_qt{Qt version}_{MSVC/GNU}_x{32/64}
ضمن الدليل الجذر لمشروع SARibbon كدليل التثبيت. هذا للتوافق مع qmake وتسهيل تثبيت إصدارات مختلفة متعددة من Qt والمترجمين على نظام تشغيل واحد. بخلاف ذلك، على نظام التشغيل Windows، سيتم تثبيته في المجلد C:Program FilesSARibbonBar
افتراضيًا.
للحصول على مرجع حول تقديم SARibbon عبر cmake، راجع src/example/MainWindowExample/CMakeLists.txt
.
لمزيد من التفاصيل، راجع الوثائق: مبنى ساريبون
الشريط عبارة عن مزيج من شريط القائمة وشريط الأدوات، ويتم عرضه من خلال عنصر تحكم علامة التبويب، ولا يمكن استبدال الشريط ببساطة بـ Tab + شريط الأدوات، الذي يتضمن الكثير من التفاصيل، يشير SARibbon
إلى نمط تسمية واجهة MFC Ribbon في التصميم ، تسمى صفحة علامة التبويب Category
، وهناك pannel
متعددة أسفل كل Category
، والتي يدير أسفلها زر الأداة، تشبه pannel
إلى حد ما Toolbar
التقليدي، مع تسلسل هرمي كما هو موضح في الصورة أدناه، وتشير هذه الأسماء إلى فئة واجهة شريط MFC
يتم شرح بعض الأسماء الشائعة أدناه
الفئة ، التي تمثل ما تقدمه التسمية، المقابلة لـ SARibbonCategory
.
فئة السياق ، هذه فئة خاصة. لا يتم عرضه بشكل طبيعي. عليك أن تقرر ما إذا كان ينبغي عرضه بناءً على السياق. الطريقة الأكثر شيوعًا هي أنه بعد إدراج صورة في Word، ستظهر تسمية متعلقة بتعديل الصورة. إذا لم يتم تحديد أي صورة، فسوف تختفي التسمية. هذه هي فئة السياق المقابلة لـ SARibbonContextCategory
.
Pannel ، هذه مجموعة من القوائم، مثل شريط الأدوات، المتوافق مع SARibbonPannel
زر التطبيق ، هذا هو الزر الموجود في أقصى اليسار في شريط علامات التبويب (الكلمة هي زر الملف المقابل). سيؤدي هذا الزر إلى تشغيل بعض الصفحات أو القوائم الخاصة، المقابلة لـ SARibbonApplicationButton
، والتي يمكن إخفاؤها.
شريط الوصول السريع ، وهو شريط أدوات بسيط في الأعلى لوضع الإجراءات الشائعة المقابلة لـ SARibbonQuickAccessBar
.
التحكم في المعرض ، هذا هو التحكم الأكثر لفتًا للنظر في الشريط. فهو يعرض الوظائف بصور بديهية، وحتى بعض عمليات العرض تتم في الوقت الفعلي وفقًا للسياق. المثال النموذجي هو اختيار النمط في كلمة المكتب. المطابق لـ SARibbonGallery
.
يظهر تخطيط SARibbonBar في الشكل أدناه
ملاحظة: تؤثر أنظمة التخطيط المختلفة على موضع
Category
Quick Access Bar
لاستخدام SARibbon في MainWindow، تحتاج إلى استبدال QMainWindow
بـ SARibbonMainWindow
، الذي يعدل الطريقة التي يعرض بها QMainWindow
شريط القوائم
لاحظ أنه إذا كنت تستخدم ملف واجهة المستخدم، فيجب عليك حذف القائمة الخاصة بملف واجهة المستخدم، وإلا فقد يتسبب ذلك في بعض الاستثناءات
رمز العينة كما يلي:
# include " SARibbonMainWindow.h "
class MainWindow : public SARibbonMainWindow
{
Q_OBJECT
public:
MainWindow (QWidget* par = nullptr );
...
}
يدعم SARibbonMainWindow
أيضًا عرض الوضع العادي باستخدام المُنشئ التالي:
SARibbonMainWindow (QWidget *parent = nullptr , bool useRibbon = true );
إذا تم تعيين المعلمة الثانية على خطأ، فسوف تستخدم وضع شريط أدوات القائمة العادي، وهذه الواجهة محجوزة لبعض المشاريع التي تحتاج إلى أن تكون قادرة على التبديل بين مشاهد الشريط وشريط أدوات القائمة الكلاسيكية، وحالة الشريط والحالة الكلاسيكية لا تدعم التبديل السريع ، إذا كنت بحاجة إلى التبديل، يمكنك تعيين ملف تكوين أو تسجيل، وتمرير خطأ إلى المعلمة الثانية عند إعادة تشغيل التطبيق للدخول إلى وضع شريط أدوات القائمة الكلاسيكية
يمكن استخدام SARibbonBar
على QWidget
أو QDialog
، راجع المثال: src/example/WidgetWithRibbon
كل ما عليك فعله هو استخدام SARibbonBar
كأداة عادية
أولاً، قم بتعريف مؤشر SARibbonBar
في ملف الرأس
private:
Ui::Widget* ui;
SARibbonBar* mRibbonBar { nullptr };
قم بإنشاء SARibbonBar
في مُنشئ الأداة، يوجد تخطيط QVBoxLayout
في ملف واجهة المستخدم الخاص بالأداة، ضع SARibbonBar
في الأعلى، وفي نفس الوقت، منذ وضع QWidget، ليست هناك حاجة لعرض العنوان، يمكنك الاتصال طريقة SARibbonBar::setTitleVisible
لإخفاء العنوان. يمكن أيضًا إلغاء زر التطبيق في QWidget عبر SARibbonBar::setApplicationButton
إذا لم يكن ذلك ضروريًا، وأخيرًا بما أن سمة SARibbonBar تم تعيينها في طريقة SARibbonMainWindow
، يمكن تعيين السمة في QWidget عبر الوظيفة العامة sa_set_ribbon_ theme
# include " SARibbonBar.h "
# include " SARibbonCategory.h "
# include " SARibbonPannel.h "
# include " SARibbonMainWindow.h "
Widget::Widget (QWidget* parent) : QWidget(parent), ui( new Ui::Widget)
{
// Note: There is a QVBoxLayout layout in the ui file
ui-> setupUi ( this );
// Create SARibbonBar
mRibbonBar = new SARibbonBar ( this );
// there is no need to display the title anymore on QWidget
mRibbonBar -> setTitleVisible ( false );
// it is better to use compact mode directly on QWidget
mRibbonBar -> setRibbonStyle (SARibbonBar::RibbonStyleCompactThreeRow);
// cancel applicationbutton
mRibbonBar -> setApplicationButton ( nullptr );
// Set the theme, although SARibbonMainWindow is not used here,
// but the theme of the Ribbon is defined in SARibbonMainWindow, so SARibbonMainWindow.h should be introduced
sa_set_ribbon_theme ( mRibbonBar , SARibbonMainWindow::RibbonThemeOffice2013);
// QWidgets sets a QVBoxLayout and puts the window in the second layout of the QVBoxLayout,
// and the first layout is given to SARibbonBar, so that SARibbonBar will be on top
ui-> verticalLayout -> insertWidget ( 0 , mRibbonBar );
buildRibbon ( mRibbonBar );
}
وهنا ما يبدو:
ترتيب إنشاء الشريط هو إنشاء فئة، ثم لوحة، وأخيرًا زر أداة (إجراء)
استخدم SARibbonBar::addCategoryPage
لإضافة فئة إلى SARibbonBar، و SARibbonCategory::addPannel
لإضافة فئة، و SARibbonPannel::addAction
لإضافة إجراء إلى Pannel
يوضح التعليمة البرمجية التالية مثالاً لإضافة إجراء:
// Add main tab - The main tab is added through the addcategorypage factory function.
SARibbonCategory* categoryMain = ribbon-> addCategoryPage (tr( " Main " ));
// Using the addpannel function to create saribponpannel. The effect is the same as that of new saribponpannel, and then call SARibbonCategory:: addpannel.
SARibbonPannel* pannel1 = categoryMain-> addPannel (( " Panel 1 " ));
QAction* actSave = new QAction( this );
actSave-> setText ( " save " );
actSave-> setIcon (QIcon( " :/icon/icon/save.svg " ));
actSave-> setObjectName ( " actSave " );
actSave-> setShortcut (QKeySequence(QLatin1String( " Ctrl+S " )));
pannel1-> addLargeAction (actSave);
تضيف العملية أعلاه زرًا، ويظهر التأثير في الشكل التالي:
يمكنك أيضًا الخروج مباشرة من SARibbonCategory
وإضافته إلى اللوحة، وسيبدو الكود التالي مشابهًا للكود أعلاه:
SARibbonCategory* categoryMain = new SARibbonCategory(tr( " Main " ));
ribbon-> addCategoryPage (categoryMain);
SARibbonPannel* pannel1 = new SARibbonPannel( " Panel 1 " );
categoryMain-> addPannel (pannel1);
QAction* actSave = new QAction( this );
...
pannel1-> addLargeAction (actSave);
يمكن دمج أنماط التخطيط المختلفة من خلال addLargeAction
و addMediumAction
و addSmallAction
. لمزيد من التفاصيل، راجع:
./src/example/MainWindowExample/mainwindow.cpp
يشير ما يسمى بفئة السياق إلى مجموعة التصنيفات/التسميات التي تظهر فقط في ظل ظروف خاصة. على سبيل المثال، عندما يقوم Office Word بتحديد صورة، ستظهر فئة السياق لتحرير الصورة، كما هو موضح في الشكل التالي:
الفئة المقابلة لفئة السياق في SARibbon هي SARibbonContextCategory
يتم عادةً إنشاء فئة السياق عند تهيئة البرنامج. عادةً ما يتم إخفاؤه وعرضه عند الحاجة إلى عرضه. يتم إنشاء فئة السياق على النحو التالي:
نظرًا لأنه يجب استدعاء فئة السياق عند استخدامها، فمن الجيد حفظها باستخدام متغير عضو. بالطبع، يمكنك أيضًا اجتياز البحث (يمكن SARibbonBar::contextCategoryList
تعداد جميع SARibbonContextCategory
).
ملف الرأس:
SARibbonContextCategory* m_contextCategory;
ملف سي بي بي:
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
الذي تم إنشاؤه بواسطة SARibbonContextCategory
بواسطة SARibbonContextCategory
. فقط عند عرض SARibbonContextCategory
، يتم عرض SARibbonCategory
المُدارة
ملاحظة: SARibbonContextCategory
ليس عنصر واجهة مستخدم.
لعرض استخدام السياق
SARibbonBar::showContextCategory
/ SARibbonBar::hideContextCategory
:
void MainWindow::onShowContextCategory ( bool on)
{
if (on) {
this -> ribbonBar ()-> showContextCategory (m_contextCategory);
} else {
this -> ribbonBar ()-> hideContextCategory (m_contextCategory);
}
}
**ملاحظة: ** إذا كنت تريد حذف contextCategory
، فأنت بحاجة إلى الاتصال SARibbonBar::destroyContextCategory
بدلاً من الحذف مباشرةً. بعد استدعاء SARibbonBar::destroyContextCategory
، لن تحتاج إلى حذف مؤشر contextCategory.
فئة السياق المختلفة لها نمط مختلف. لمزيد من التفاصيل، راجع: [نمط SARibbon] (نمط #SARibbon) و [مقارنة العرض ضمن أنماط مختلفة] (#مقارنة العرض ضمن أنماط مختلفة).
يوجد زر خاص وواضح يسمى ApplicationButton
في الزاوية اليسرى العليا من واجهة الشريط. يستخدم هذا الزر بشكل عام لاستدعاء القوائم. يقوم SARibbonBar بإنشاء ApplicationButton
بشكل افتراضي أثناء الإنشاء. ويمكن ضبط نصه بالطرق التالية:
SARibbonBar* ribbon = ribbonBar();
ribbon-> applicationButton ()->setText(( " File " ));
يرث applicationButton الافتراضي من SARibbonApplicationButton
، ويرث SARibbonApplicationButton
من QPushButton
، حتى تتمكن من تنفيذ كافة العمليات على QPushButton
. بالطبع، إذا كنت تريد تعيين الزر الخاص بك كزر تطبيق، يمكنك فقط استدعاء وظيفة SARibbonBar::setApplicationButton
.
QuickAccessBar هو شريط الأدوات السريع في الزاوية اليسرى العليا وrightButtonGroup هو شريط الأدوات السريع في الزاوية اليمنى العليا. في الوضع المكتبي، يتم تقسيمه إلى الجانبين الأيسر والأيمن. في وضع WPS، سيتم دمج الجانبين الأيسر والأيمن ووضعهما على اليمين.
في SARibbon
:
SARibbonQuickAccessBar
.SARibbonQuickAccessBar
. أثناء التهيئة، سيقوم SARibbonBar
بإنشاء QuickAccessBar وRightButtonGroup بشكل افتراضي. يمكن الحصول على مؤشراته من خلال SARibbonBar::quickAccessBar
و SARibbonBar::rightButtonGroup
. الأمثلة هي كما يلي:
QAction* MainWindow::createAction ( const QString& text, const QString& iconurl, const QString& objName)
{
QAction* act = new QAction ( this );
act-> setText (text);
act-> setIcon ( QIcon (iconurl));
act-> setObjectName (objName);
return act;
}
void MainWindow::initQuickAccessBar (){
SARibbonBar* ribbon = ribbonBar ();
SARibbonQuickAccessBar* quickAccessBar = ribbon-> quickAccessBar ();
quickAccessBar-> addAction ( createAction ( " save " , " :/icon/icon/save.svg " , " save-quickbar " ));
quickAccessBar-> addSeparator ();
quickAccessBar-> addAction ( createAction ( " undo " , " :/icon/icon/undo.svg " ), " undo " );
quickAccessBar-> addAction ( createAction ( " redo " , " :/icon/icon/redo.svg " ), " redo " );
quickAccessBar-> addSeparator ();
}
void MainWindow::initRightButtonGroup (){
SARibbonBar* ribbon = ribbonBar ();
SARibbonButtonGroupWidget* rightBar = ribbon-> rightButtonGroup ();
QAction* actionHelp = createAction ( " help " , " :/icon/icon/help.svg " , " help " );
connect (actionHelp, &QAction::triggered, this , &MainWindow::onActionHelpTriggered);
rightBar-> addAction (actionHelp);
}
يدعم SARibbon
التبديل بين أربعة أنماط للشريط. هنا، تتم الإشارة إلى نمط الشريط الخاص office
و WPS
. يمكن تحقيق تبديل النمط عبر الإنترنت من خلال void SARibbonBar::setRibbonStyle(RibbonStyle v)
.
وضع office
هو وضع الشريط الأكثر شيوعًا، حيث تشغل tab
وشريط العنوان مساحة أكبر، وقد تم تحسين وضع الشريط المصمم بواسطة WPS
، فهو يقلل من ارتفاع الشريط، ويتم ضبط الملصق وشريط العنوان معًا، وذلك تقليل ارتفاع شريط العنوان، واستخدام المساحة الرأسية بشكل فعال، وفي الوقت نفسه، يتم تغيير تخطيط زر اللوحة من 3 إلى 2 كحد أقصى، مما يزيد من ضغط المساحة الرأسية
مقارنة لقطة الشاشة بين واجهة الكلمات الخاصة بالمكتب وواجهة الكلمات الخاصة بـ WPS
في ظل الشاشة العادية، سيعمل نمط WPS على تقليل الارتفاع العمودي بما لا يقل عن 30 بكسل مقارنة بنمط Office، وهو ما يعادل توفير ما يقرب من 3% من المساحة الرأسية مقارنة بشاشة 1920*1080.
في SARibbon، يُطلق على الجزء الذي يحتوي على شريط العنوان اسم فضفاض، ويتم ترتيب عناصر التخطيط الحر كما هو موضح أدناه:
يتوافق هذا التخطيط مع التخطيط الافتراضي لـ Office
في SARibbon، يسمى التخطيط الذي يحتوي على شريط عنوان وعلامة تبويب بالتخطيط المضغوط، ويتم ترتيب عناصر التخطيط المضغوط على النحو التالي:
يوفر SARibbonBar وظيفة setRibbonStyle
التي تحدد نمط التخطيط الحالي، ويحدد تعداد SARibbonBar::RibbonStyle
أربعة أنظمة تخطيط:
SARibbonBar::RibbonStyleLooseThreeRow
فضفاض مع ثلاثة صفوف (الإصدار v0.x هو SARibbonBar::OfficeStyle
) SARibbonBar::RibbonStyleLooseTwoRow
فضفاض مع صفين (الإصدار v0.x هو SARibbonBar::OfficeStyleTwoRow
) SARibbonBar::RibbonStyleCompactThreeRow
مضغوط بثلاثة صفوف (الإصدار v0.x هو SARibbonBar::WpsLiteStyle
) SARibbonBar::RibbonStyleCompactTwoRow
مضغوط مع صفين (الإصدار v0.x هو SARibbonBar::WpsLiteStyleTwoRow
) تتيح لك وظيفة SARibbonBar::setEnableWordWrap
التحكم فيما إذا كان نص SARibbonBar يلتف أم لا، ويتم إصلاح ارتفاع SARibbonBar
، وما إذا كان التفاف النص أم لا سيؤثر على حجم عرض الأيقونة، لذلك إذا كنت تريد الأيقونة لتبدو أكبر، يمكنك ضبط النص بحيث لا يلتف
في نمط تخطيط SARibbonBar::RibbonStyleCompactTwoRow
، يتم عرض النص بدون التفاف كما يلي:
SARibbonBar::RibbonStyleCompactTwoRow
紧凑结构,2行模式把文字设置为不换行后( SARibbonBar::setEnableWordWrap(false)
)
عندما يتم تعيين نص SARibbonBar على عدم الالتفاف، تصبح مساحة عرض الرمز أكبر
يوفر SARibbonPannel
ثلاث طرق لإضافة إجراء:
addLargeAction
addMediumAction
addSmallAction
في اللوحة القياسية، يحتوي الإجراء (الزر) على ثلاثة أوضاع تخطيطات. بأخذ كلمة office كمثال، فإن التخطيطات الثلاثة لللوحة هي في الواقع عدد الأسطر المشغولة:
يتم استخدام SARibbonPannelItem::RowProportion
لتمثيل عدد الصفوف التي يشغلها كل نموذج في اللوحة. يتم استخدامه بشكل شائع في تخطيط اللوحة. يتم تعريف هذا التعداد على النحو التالي:
/* *
* @brief defines the proportion of rows. The ribbon has three proportions: large, media and small.
*/
enum RowProportion {
None // /< to define the proportion, it will be judged according to expandingDirections. If Qt::Vertical is available, it is equal to Large, otherwise it is Small
, Large // /< Large proportion, the height of a widget will fill the whole pannel.
, Medium // /< Medium proportion will only work when @ref SARibbonPannel::pannelLayoutMode is @ref SARibbonPannel::ThreeRowMode, and will occupy two of the three rows if both of them in the same column are Medium.
, Small // /< Small proportion, in the line of SARibbonPannel, Medium will become Small if it does not meet the conditions, but will not become Large.
};
سيكون لكل إجراء تتم إدارته في SARibbonPannel
خاصية خاصة ( SARibbonPannelItem::RowProportion
). تحدد هذه الخاصية تخطيط هذا الإجراء في اللوحة.
SARibbonPannel
وضع الخطوط الثلاثة هو تخطيط اللوحة التقليدي، كما هو موضح في الشكل التالي:
في وضع الخطوط الثلاثة، هناك ثلاثة أنواع من العناصر النائبة، وهي كبيرة ومتوسطة وصغيرة
ستعرض اللوحة في وضع الخطوط الثلاثة عنوان اللوحة في منطقة عنوان اللوحة، وهناك منطقة OptionAction أخرى. يتم استخدام هذه المنطقة لإضافة مشغل خاص لهذا الإجراء. إذا لم يتم تعيين OptionAction، فستكون هذه المنطقة مخفية.
وضع الخطين هو أسلوب تخطيط WPS المحسن، كما هو موضح في الشكل التالي:
في الوضع المكون من سطرين، تكون العناصر النائبة المتوسطة والصغيرة (SARibbonPannelItem::RowProportion) هي نفسها، ولا يوجد أي تمييز.
في وضع الخطين، لا تعرض اللوحة العنوان.
تخصيص الشريط هو سمة من سمات الشريط. بالإشارة إلى الواجهة المخصصة للمكتب وWPS، يمكن للمستخدمين تحديد الكثير من المحتوى لشريطهم الخاص، أو حتى تحديد واجهة مختلفة تمامًا عن الواجهة الأصلية.
فيما يلي الواجهة المخصصة للمكتب.
يشير SARibbon إلى واجهة المكتب وWPS، ويتضمن فئة SARibbonCustomize**
سهلة الاستخدام، بما في ذلك الفئات الخمس التالية:
SARibbonCustomizeDialog
SARibbonCustomizeWidget
SARibbonCustomizeData
SARibbonActionsManager
SARibbonActionsManagerModel
يمكن للمستخدمين الفعليين فقط استخدام SARibbonActionsManager
و SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
، ولن يستخدمهما المستخدمون الآخرون بشكل طبيعي.
يتم استخدام SARibbonActionsManager
لإدارة QAction
، وإضافة QAction
المطلوب تخصيصه إلى SARibbonActionsManager
للإدارة، وتصنيف QAction
بحيث يمكن عرضها في SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
.
SARibbonCustomizeDialog
/ SARibbonCustomizeWidget
هي نافذة عرض محددة. يقوم SARibbonCustomizeDialog
بتغليف SARibbonCustomizeWidget
كمربع حوار. إذا كنت تريد دمجه في مربع حوار التكوين مثل المكتب، فيمكنك استخدام SARibbonCustomizeWidget
. يظهر تأثير SARibbonCustomizeDialog
في الشكل التالي:
إليك كيفية إضافة ميزات مخصصة.
أولاً، قم بتعريف SARibbonActionsManager
كمتغير العضو في MainWindow
.
// Define member variables in the MainWindow.h.
SARibbonActionsManager* m_ribbonActionMgr; // /< Manage all actions
أثناء تهيئة MainWindow
، يجب إنشاء عدد كبير من QAction
. تم تعيين الكائن الأصلي لـ QAction
كـ MainWindow
. بالإضافة إلى ذلك، سيتم إنشاء تخطيط الشريط، مثل إضافة فئة وإضافة لوحة وعمليات أخرى. بعد اكتمال العمليات المذكورة أعلاه، أضف الخطوات التالية للسماح SARibbonActionsManager
تلقائيًا بإدارة جميع QAction
.
// Initialization of MainWindow and generation of QAction.
// Generate ribbon layout.
m_ribbonActionMgr = new SARibbonActionsManager(mainWinowPtr);
m_ribbonActionMgr-> autoRegisteActions (mainWinowPtr);
يمكن للوظيفة الرئيسية autoRegisteActions
الخاصة بـ SARibbonActionsManager
اجتياز جميع الكائنات الفرعية ضمن SARibbonMainWindow
، والعثور على الإجراء وتسجيله، واجتياز جميع SARibbonCategory
. يتم تصنيف الإجراءات ضمن SARibbonCategory
وفقًا لاسم عنوان SARibbonCategory
. تسجل هذه الوظيفة أيضًا الإجراءات ضمن SARibbonMainWindow
، ولكن ليس ضمن أي فئة، مثل علامات "NotInRibbonCategoryTag"، والاسم الافتراضي هو "ليس في الشريط".
للاتصال بـ SARibbonCustomizeDialog كما يلي:
QString cfgpath = " customization.xml " ;
SARibbonCustomizeDialog dlg ( this , this );
dlg.setupActionsManager(m_ribbonActionMgr);
dlg.fromXml(cfgpath); // This step is called to load the existing custom steps, which can be added based on the original custom steps when saving.
if (QDialog::Accepted == dlg.exec()) {
dlg. applys (); // Apply custom steps
dlg. toXml (cfgpath); // Save custom steps to a file
}
قبل إنشاء MainWindow، يجب تحميل المحتوى المخصص. ولذلك، ينبغي إضافة العبارة التالية إلى المنشئ:
// Constructor of MainWindow
sa_apply_customize_from_xml_file ( " customization.xml " , this , m_ribbonActionMgr);
sa_apply_customize_from_xml_file
هي الوظيفة المتوفرة في SARibbonCustomizeWidget.h
. يتم تطبيق المحتويات المخصصة في ملف التكوين مباشرة في MainWindow.
بهذه الطريقة، سيتم تحميل البرنامج وفقًا لملف التكوين في كل مرة يتم تشغيله.
جيثب - https://github.com/czyt1988/data-workbench
جيتي - https://gitee.com/czyt1988/data-workbench
يمكن رؤية رمز إنشاء الشريط المحدد:
https://github.com/czyt1988/data-workbench/blob/master/src/APP/DAAppRibbonArea.cpp
هناك طريقتان للتحضير لمشكلة عرض الشاشة ذات DPI العالية:
Qt::AA_EnableHighDpiScaling
لـ QApplication
في الوظيفة الرئيسيةتتيح هذه السمة للتطبيق اكتشاف كثافة البكسل في الشاشة تلقائيًا لتحقيق القياس التلقائي، مثل:
int main ( int argc, char * argv[])
{
# if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
QApplication::setAttribute (Qt::AA_EnableHighDpiScaling);
QApplication::setAttribute (Qt::AA_UseHighDpiPixmaps);
# endif
QApplication a (argc, argv);
......
}
QApplication
في الوظيفة الرئيسية: QApplication::setHighDpiScaleFactorRoundingPolicy
يوفر Qt5.6 Qt::AA_EnableHighDpiScaling
، لكنه لا يستطيع حل مشكلة الشاشات ذات DPI العالية بشكل كامل. يوفر Qt5.14 إعدادًا لسياسة قياس الشاشة بنقطة عالية في البوصة يسمى QApplication::setHighDpiScaleFactorRoundingPolicy
، ويجب أيضًا تعيينه في الوظيفة الرئيسية، على سبيل المثال:
int main ( int argc, char * argv[])
{
# if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
QApplication::setAttribute (Qt::AA_EnableHighDpiScaling);
QApplication::setAttribute (Qt::AA_UseHighDpiPixmaps);
# endif
# if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
QApplication::setHighDpiScaleFactorRoundingPolicy (Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
# endif
QApplication a (argc, argv);
......
}
غالبًا ما يقدم الأشخاص تعليقات مفادها أنه بعد استخدام SARibbonBar، لا تستجيب مفاتيح الاختصار لصفحات علامات التبويب غير النشطة، وتستجيب مفاتيح الاختصار لصفحات علامات التبويب النشطة فقط. إذا كان في وضع شريط الأدوات التقليدي، فسيظل مفتاح الاختصار ساري المفعول لأن شريط الأدوات الذي يوجد به الإجراء يكون دائمًا في المقدمة. ومع ذلك، إذا كان SARibbonBar، فسيكون مفتاح الاختصار في لوحة الإجراءات مخفيًا، ولن يصبح ساري المفعول بعد الإخفاء، إذا كنت تريد أن يصبح مفتاح الاختصار ساري المفعول بغض النظر عما إذا كان Pannel مخفيًا أم لا، فاضبط مفتاح الاختصار. خاصية الاختصارContext لـ Qt::ApplicationShortcut
غير صالحة أيضًا. في هذه الحالة، يمكنك إنشاء مفتاح الاختصار يدويًا في المكان الذي أنشأت فيه الفئة
مثال:
ribbon build
...
QShortcut* shortCut = new QShortcut(QKeySequence(QLatin1String( " Ctrl+S " )), this );
connect (shortCut, &QShortcut::activated, this , [ actSave ]() {
actSave-> trigger ();
});