From 01125e0c8c90eb954b1700896cd41f849b982f21 Mon Sep 17 00:00:00 2001 From: czyt1988 Date: Thu, 18 Jan 2024 20:16:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E5=90=8D=E5=AD=97=E6=98=BE=E7=A4=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SARibbonBar/SARibbonActionsManager.cpp | 51 ++--- src/SARibbonBar/SARibbonCategory.cpp | 12 +- src/SARibbonBar/SARibbonCategory.h | 6 + src/SARibbonBar/SARibbonContextCategory.cpp | 2 +- src/SARibbonBar/SARibbonCustomizeWidget.cpp | 203 +++++++++--------- src/SARibbonBar/SARibbonPannel.cpp | 7 +- src/SARibbonBar/SARibbonPannel.h | 6 + src/example/MainWindowExample/mainwindow.cpp | 93 ++++---- src/example/MainWindowExample/mainwindow.h | 8 +- .../NormalMenuBarExample/CMakeLists.txt | 2 +- 10 files changed, 216 insertions(+), 174 deletions(-) diff --git a/src/SARibbonBar/SARibbonActionsManager.cpp b/src/SARibbonBar/SARibbonActionsManager.cpp index 447a50c6..0b9ddefd 100644 --- a/src/SARibbonBar/SARibbonActionsManager.cpp +++ b/src/SARibbonBar/SARibbonActionsManager.cpp @@ -73,10 +73,10 @@ void SARibbonActionsManager::removeTag(int tag) { QList< QAction* > oldacts = actions(tag); - //开始移除 + // 开始移除 d_ptr->mTagToActions.remove(tag); d_ptr->mTagToName.remove(tag); - //开始查找需要移出总表的action + // 开始查找需要移出总表的action QList< QAction* > needRemoveAct; QList< QAction* > total; @@ -88,7 +88,7 @@ void SARibbonActionsManager::removeTag(int tag) needRemoveAct.append(a); } } - //从总表移除action + // 从总表移除action for (QAction* a : qAsConst(needRemoveAct)) { auto i = d_ptr->mActionToKey.find(a); if (i != d_ptr->mActionToKey.end()) { @@ -120,19 +120,20 @@ bool SARibbonActionsManager::registeAction(QAction* act, int tag, const QString& k = QString("id_%1_%2").arg(d_ptr->mSale++).arg(act->objectName()); } if (d_ptr->mKeyToAction.contains(k)) { - qWarning() << "key: " << k << " have been exist,you can set key in an unique value when use SARibbonActionsManager::registeAction"; + qWarning() << "key: " + << k << " have been exist,you can set key in an unique value when use SARibbonActionsManager::registeAction"; return (false); } d_ptr->mKeyToAction[ k ] = act; d_ptr->mActionToKey[ act ] = k; - //记录tag 对 action - bool isneedemit = !(d_ptr->mTagToActions.contains(tag)); //记录是否需要发射信号 + // 记录tag 对 action + bool isneedemit = !(d_ptr->mTagToActions.contains(tag)); // 记录是否需要发射信号 d_ptr->mTagToActions[ tag ].append(act); - //绑定槽 + // 绑定槽 connect(act, &QObject::destroyed, this, &SARibbonActionsManager::onActionDestroyed); if (isneedemit && enableEmit) { - //说明新增tag + // 说明新增tag emit actionTagChanged(tag, false); } return (true); @@ -151,7 +152,7 @@ void SARibbonActionsManager::unregisteAction(QAction* act, bool enableEmit) if (nullptr == act) { return; } - //绑定槽 + // 绑定槽 disconnect(act, &QObject::destroyed, this, &SARibbonActionsManager::onActionDestroyed); removeAction(act, enableEmit); } @@ -165,11 +166,11 @@ void SARibbonActionsManager::unregisteAction(QAction* act, bool enableEmit) */ void SARibbonActionsManager::removeAction(QAction* act, bool enableEmit) { - QList< int > deletedTags; //记录删除的tag,用于触发actionTagChanged + QList< int > deletedTags; // 记录删除的tag,用于触发actionTagChanged QMap< int, QList< QAction* > > tagToActions; ///< tag : QList for (auto i = d_ptr->mTagToActions.begin(); i != d_ptr->mTagToActions.end(); ++i) { - //把不是act的内容转移到tagToActions和tagToActionKeys中,之后再和m_d里的替换 + // 把不是act的内容转移到tagToActions和tagToActionKeys中,之后再和m_d里的替换 auto tmpi = tagToActions.insert(i.key(), QList< QAction* >()); int count = 0; for (int j = 0; j < i.value().size(); ++j) { @@ -179,20 +180,20 @@ void SARibbonActionsManager::removeAction(QAction* act, bool enableEmit) } } if (0 == count) { - //说明这个tag没有内容 + // 说明这个tag没有内容 tagToActions.erase(tmpi); deletedTags.append(i.key()); } } - //删除mKeyToAction + // 删除mKeyToAction QString key = d_ptr->mActionToKey.value(act); d_ptr->mActionToKey.remove(act); d_ptr->mKeyToAction.remove(key); - //置换 + // 置换 d_ptr->mTagToActions.swap(tagToActions); - //发射信号 + // 发射信号 if (enableEmit) { for (int tagdelete : qAsConst(deletedTags)) { emit actionTagChanged(tagdelete, true); @@ -289,23 +290,23 @@ QList< QAction* > SARibbonActionsManager::allActions() const QMap< int, SARibbonCategory* > SARibbonActionsManager::autoRegisteActions(SARibbonBar* bar) { QMap< int, SARibbonCategory* > res; - //先遍历SARibbonBar的父窗口(一般是SARibbonMainWindow)下的所有子对象,把所有action找到 + // 先遍历SARibbonBar的父窗口(一般是SARibbonMainWindow)下的所有子对象,把所有action找到 QWidget* parWidget = bar->parentWidget(); QSet< QAction* > mainwindowActions; if (parWidget) { for (QObject* o : qAsConst(parWidget->children())) { if (QAction* a = qobject_cast< QAction* >(o)) { - //说明是action + // 说明是action if (!a->objectName().isEmpty()) { mainwindowActions.insert(a); } } } } - //开始遍历每个category,加入action + // 开始遍历每个category,加入action if (nullptr == bar) { - //非ribbon模式,直接退出 + // 非ribbon模式,直接退出 return (res); } QSet< QAction* > categoryActions; @@ -321,7 +322,7 @@ QMap< int, SARibbonCategory* > SARibbonActionsManager::autoRegisteActions(SARibb res[ tag ] = c; ++tag; } - //找到不在功能区的actions + // 找到不在功能区的actions QSet< QAction* > notincategory = mainwindowActions - categoryActions; for (QAction* a : qAsConst(notincategory)) { @@ -333,7 +334,7 @@ QMap< int, SARibbonCategory* > SARibbonActionsManager::autoRegisteActions(SARibb setTagName(NotInRibbonCategoryTag, tr("not in ribbon")); } for (auto i = res.begin(); i != res.end(); ++i) { - connect(i.value(), &SARibbonCategory::windowTitleChanged, this, &SARibbonActionsManager::onCategoryTitleChanged); + connect(i.value(), &SARibbonCategory::categoryNameChanged, this, &SARibbonActionsManager::onCategoryTitleChanged); } d_ptr->mTagToCategory = res; return (res); @@ -353,8 +354,8 @@ QSet< QAction* > SARibbonActionsManager::autoRegisteWidgetActions(QWidget* w, in for (QAction* a : qAsConst(was)) { if (res.contains(a) || a->objectName().isEmpty()) { - //重复内容不重复加入 - //没有object name不加入 + // 重复内容不重复加入 + // 没有object name不加入 continue; } if (registeAction(a, tag, a->objectName(), enableEmit)) { @@ -511,10 +512,10 @@ SARibbonActionsManagerModel::~SARibbonActionsManagerModel() int SARibbonActionsManagerModel::rowCount(const QModelIndex& parent) const { - if (parent.isValid()) { //非顶层 + if (parent.isValid()) { // 非顶层 return (0); } - //顶层 + // 顶层 return (d_ptr->count()); } diff --git a/src/SARibbonBar/SARibbonCategory.cpp b/src/SARibbonBar/SARibbonCategory.cpp index 47894e53..64a3d761 100644 --- a/src/SARibbonBar/SARibbonCategory.cpp +++ b/src/SARibbonBar/SARibbonCategory.cpp @@ -42,6 +42,8 @@ class SARibbonCategory::PrivateData void updateItemGeometry(); void doWheelEvent(QWheelEvent* event); + // 初始化 + void init(SARibbonCategory* c); public: bool mEnableShowPannelTitle { true }; ///< 是否运行pannel的标题栏显示 @@ -200,20 +202,26 @@ void SARibbonCategory::PrivateData::doWheelEvent(QWheelEvent* event) } } +void SARibbonCategory::PrivateData::init(SARibbonCategory* c) +{ + c->setLayout(new SARibbonCategoryLayout(c)); + c->connect(c, &SARibbonCategory::windowTitleChanged, c, &SARibbonCategory::categoryNameChanged); +} + //---------------------------------------------------- // SARibbonCategory //---------------------------------------------------- SARibbonCategory::SARibbonCategory(QWidget* p) : QFrame(p), d_ptr(new SARibbonCategory::PrivateData(this)) { - setLayout(new SARibbonCategoryLayout(this)); + d_ptr->init(this); } SARibbonCategory::SARibbonCategory(const QString& name, QWidget* p) : QFrame(p), d_ptr(new SARibbonCategory::PrivateData(this)) { - setLayout(new SARibbonCategoryLayout(this)); setCategoryName(name); + d_ptr->init(this); } SARibbonCategory::~SARibbonCategory() diff --git a/src/SARibbonBar/SARibbonCategory.h b/src/SARibbonBar/SARibbonCategory.h index da0de192..41258eb8 100644 --- a/src/SARibbonBar/SARibbonCategory.h +++ b/src/SARibbonBar/SARibbonCategory.h @@ -112,6 +112,12 @@ class SA_RIBBON_EXPORT SARibbonCategory : public QFrame // 此函数会遍历Category下的所有pannel,执行函数指针,函数指针返回false则停止迭代 bool iterate(FpPannelIterate fp); +signals: + /** + * @brief category标题发生了改变信号 + * @param n + */ + void categoryNameChanged(const QString& n); protected: virtual bool event(QEvent* e) Q_DECL_OVERRIDE; diff --git a/src/SARibbonBar/SARibbonContextCategory.cpp b/src/SARibbonBar/SARibbonContextCategory.cpp index 28e6c016..e08da59c 100644 --- a/src/SARibbonBar/SARibbonContextCategory.cpp +++ b/src/SARibbonBar/SARibbonContextCategory.cpp @@ -68,7 +68,7 @@ void SARibbonContextCategory::addCategoryPage(SARibbonCategory* category) return; } category->markIsContextCategory(true); - connect(category, &SARibbonCategory::windowTitleChanged, this, &SARibbonContextCategory::onCategoryTitleChanged); + connect(category, &SARibbonCategory::categoryNameChanged, this, &SARibbonContextCategory::onCategoryTitleChanged); SAPrivateRibbonCategoryData catData; catData.categoryPage = category; d_ptr->categoryDataList.append(catData); diff --git a/src/SARibbonBar/SARibbonCustomizeWidget.cpp b/src/SARibbonBar/SARibbonCustomizeWidget.cpp index 665316cb..632c22d4 100644 --- a/src/SARibbonBar/SARibbonCustomizeWidget.cpp +++ b/src/SARibbonBar/SARibbonCustomizeWidget.cpp @@ -61,7 +61,7 @@ bool sa_customize_datas_to_xml(QXmlStreamWriter* xml, const QList< SARibbonCusto QList< SARibbonCustomizeData > sa_customize_datas_from_xml(QXmlStreamReader* xml, SARibbonActionsManager* mgr) { - //先找到"sa-ribbon-customize" + // 先找到"sa-ribbon-customize" while (!xml->atEnd()) { if (xml->isStartElement() && (xml->name().toString() == "sa-ribbon-customize")) { @@ -71,26 +71,26 @@ QList< SARibbonCustomizeData > sa_customize_datas_from_xml(QXmlStreamReader* xml } QList< SARibbonCustomizeData > res; - //开始遍历"customize-data" + // 开始遍历"customize-data" while (!xml->atEnd()) { if (xml->isStartElement() && (xml->name().toString() == "customize-data")) { - //首先读取属性type + // 首先读取属性type SARibbonCustomizeData d; QXmlStreamAttributes attrs = xml->attributes(); if (!attrs.hasAttribute("type")) { - //说明异常,跳过这个 + // 说明异常,跳过这个 xml->readNextStartElement(); continue; } bool isOk = false; int v = xml->attributes().value("type").toInt(&isOk); if (!isOk) { - //说明异常,跳过这个 + // 说明异常,跳过这个 xml->readNextStartElement(); continue; } d.setActionType(static_cast< SARibbonCustomizeData::ActionType >(v)); - //开始读取子对象 + // 开始读取子对象 if (attrs.hasAttribute("index")) { v = xml->attributes().value("index").toInt(&isOk); if (isOk) { @@ -135,10 +135,10 @@ int sa_customize_datas_apply(const QList< SARibbonCustomizeData >& cds, SARibbon return (c); } -int sa_customize_datas_reverse(const QList &cds, SARibbonBar *bar) +int sa_customize_datas_reverse(const QList< SARibbonCustomizeData >& cds, SARibbonBar* bar) { int c = 0; - //todo 支持反向操作 + // todo 支持反向操作 return (c); } @@ -293,8 +293,8 @@ class SARibbonCustomizeWidgetUi treeViewResult->setObjectName(QStringLiteral("treeViewResult")); treeViewResult->setHeaderHidden(true); treeViewResult->setSelectionMode(QAbstractItemView::SingleSelection); - treeViewResult->setAnimated(true); //支持动画 - treeViewResult->setEditTriggers(QAbstractItemView::NoEditTriggers); //不允许直接在item上重命名 + treeViewResult->setAnimated(true); // 支持动画 + treeViewResult->setEditTriggers(QAbstractItemView::NoEditTriggers); // 不允许直接在item上重命名 verticalLayoutResult->addWidget(treeViewResult); @@ -358,10 +358,12 @@ class SARibbonCustomizeWidgetUi labelSelectAction->setText(QApplication::translate("SARibbonCustomizeWidget", "Please Select", Q_NULLPTR)); // cn:请选择 lineEditSearchAction->setInputMask(QString()); lineEditSearchAction->setText(QString()); - lineEditSearchAction->setPlaceholderText(QApplication::translate("SARibbonCustomizeWidget", "Find Command", Q_NULLPTR)); // cn:查找命令 + lineEditSearchAction->setPlaceholderText( + QApplication::translate("SARibbonCustomizeWidget", "Find Command", Q_NULLPTR)); // cn:查找命令 pushButtonAdd->setText(QApplication::translate("SARibbonCustomizeWidget", "Add >>", Q_NULLPTR)); // cn:添加 >> pushButtonDelete->setText(QApplication::translate("SARibbonCustomizeWidget", "<< Remove", Q_NULLPTR)); // cn:<< 移除 - labelCustomize->setText(QApplication::translate("SARibbonCustomizeWidget", "Customize the Ribbon", Q_NULLPTR)); // cn:自定义功能区 + labelCustomize->setText( + QApplication::translate("SARibbonCustomizeWidget", "Customize the Ribbon", Q_NULLPTR)); // cn:自定义功能区 radioButtonMainCategory->setText(QApplication::translate("SARibbonCustomizeWidget", "Main Category", Q_NULLPTR)); // cn:主选项卡 radioButtonAllCategory->setText(QApplication::translate("SARibbonCustomizeWidget", "All Category", Q_NULLPTR)); // cn:所有选项卡 pushButtonNewCategory->setText(QApplication::translate("SARibbonCustomizeWidget", "New Category", Q_NULLPTR)); // cn:新建选项卡 @@ -390,10 +392,10 @@ class SARibbonCustomizeWidget::PrivateData PrivateData(SARibbonCustomizeWidget* p); void updateModel(); - QList< SARibbonCustomizeData > mCustomizeDatasCache; ///< 缓存记录所有的自定义动作 - QList< SARibbonCustomizeData > mCustomizeDatasApplied; ///< 应用后的所有的自定义动作 - QList< SARibbonCustomizeData > mOldCustomizeDatas; ///< 记录旧的自定义动作,本地文件缓存 - //创建一个随机id,形如:pre_QDateTime::currentMSecsSinceEpoch_suf + QList< SARibbonCustomizeData > mCustomizeDatasCache; ///< 缓存记录所有的自定义动作 + QList< SARibbonCustomizeData > mCustomizeDatasApplied; ///< 应用后的所有的自定义动作 + QList< SARibbonCustomizeData > mOldCustomizeDatas; ///< 记录旧的自定义动作,本地文件缓存 + // 创建一个随机id,形如:pre_QDateTime::currentMSecsSinceEpoch_suf static QString makeRandomObjName(const QString& pre); int itemLevel(QStandardItem* item) const; @@ -401,19 +403,19 @@ class SARibbonCustomizeWidget::PrivateData // bool isCustomizeItem(QStandardItem* item) const; - //把item转换为category + // 把item转换为category SARibbonCategory* itemToCategory(QStandardItem* item) const; - //把item转换为SARibbonPannel + // 把item转换为SARibbonPannel SARibbonPannel* itemToPannel(QStandardItem* item) const; - //获取item对应的object name + // 获取item对应的object name QString itemObjectName(QStandardItem* item) const; - //判断是否可以自定义 + // 判断是否可以自定义 bool isItemCanCustomize(QStandardItem* item) const; - //从item转为action + // 从item转为action QAction* itemToAction(QStandardItem* item) const; }; @@ -433,30 +435,30 @@ void SARibbonCustomizeWidget::PrivateData::updateModel() for (const SARibbonCategory* c : qAsConst(categorys)) { if ((mShowType == SARibbonCustomizeWidget::ShowMainCategory) && c->isContextCategory()) { - //如果是只显示主内容,如果是上下文标签就忽略 + // 如果是只显示主内容,如果是上下文标签就忽略 continue; } QStandardItem* ci = new QStandardItem(); if (c->isContextCategory()) { - ci->setText(QString("[%1]").arg(c->windowTitle())); + ci->setText(QString("[%1]").arg(c->categoryName())); } else { - ci->setText(c->windowTitle()); + ci->setText(c->categoryName()); } if (c->isCanCustomize() && !c->isContextCategory()) { - //上下文标签不做显示隐藏处理 + // 上下文标签不做显示隐藏处理 ci->setCheckable(true); ci->setCheckState(ribbonbar->isCategoryVisible(c) ? Qt::Checked : Qt::Unchecked); - ci->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //标记这个是可以自定义的 + ci->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); // 标记这个是可以自定义的 } ci->setData(0, SARibbonCustomizeWidget::LevelRole); ci->setData(QVariant::fromValue< qintptr >(qintptr(c)), SARibbonCustomizeWidget::PointerRole); QList< SARibbonPannel* > pannels = c->pannelList(); for (const SARibbonPannel* p : qAsConst(pannels)) { - QStandardItem* pi = new QStandardItem(p->windowTitle()); + QStandardItem* pi = new QStandardItem(p->pannelName()); pi->setData(1, SARibbonCustomizeWidget::LevelRole); pi->setData(QVariant::fromValue< qintptr >(qintptr(p)), SARibbonCustomizeWidget::PointerRole); if (p->isCanCustomize()) { - pi->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //标记这个是可以自定义的 + pi->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); // 标记这个是可以自定义的 } ci->appendRow(pi); const QList< SARibbonPannelItem* >& items = p->ribbonPannelItem(); @@ -465,29 +467,29 @@ void SARibbonCustomizeWidget::PrivateData::updateModel() continue; } QStandardItem* ii = new QStandardItem(); -// if (i->customWidget) { -// //如果是自定义窗口 -// if (i->widget()->windowTitle().isEmpty() && i->widget()->windowIcon().isNull()) { -// delete ii; -// continue; //如果窗口啥也没有,就跳过 -// } -// ii->setText(i->widget()->windowTitle()); -// ii->setIcon(i->widget()->windowIcon()); -// if (SARibbonCustomizeData::isCanCustomize(i->widget())) { -// ii->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //标记这个是可以自定义的 -// } -// } else { -// //不是自定义,说明是action -// ii->setText(i->action->text()); -// ii->setIcon(i->action->icon()); -// if (SARibbonCustomizeData::isCanCustomize(i->action)) { -// ii->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //标记这个是可以自定义的 -// } -// } + // if (i->customWidget) { + // //如果是自定义窗口 + // if (i->widget()->windowTitle().isEmpty() && i->widget()->windowIcon().isNull()) { + // delete ii; + // continue; //如果窗口啥也没有,就跳过 + // } + // ii->setText(i->widget()->windowTitle()); + // ii->setIcon(i->widget()->windowIcon()); + // if (SARibbonCustomizeData::isCanCustomize(i->widget())) { + // ii->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //标记这个是可以自定义的 + // } + // } else { + // //不是自定义,说明是action + // ii->setText(i->action->text()); + // ii->setIcon(i->action->icon()); + // if (SARibbonCustomizeData::isCanCustomize(i->action)) { + // ii->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //标记这个是可以自定义的 + // } + // } ii->setText(i->action->text()); ii->setIcon(i->action->icon()); if (SARibbonCustomizeData::isCanCustomize(i->action)) { - ii->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //标记这个是可以自定义的 + ii->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); // 标记这个是可以自定义的 } ii->setData(2, SARibbonCustomizeWidget::LevelRole); ii->setData(QVariant::fromValue< qintptr >(qintptr(i)), SARibbonCustomizeWidget::PointerRole); @@ -575,10 +577,10 @@ QString SARibbonCustomizeWidget::PrivateData::itemObjectName(QStandardItem* item QString objName; if (isCustomizeItem(item)) { - //说明是自定义的 + // 说明是自定义的 objName = item->data(SARibbonCustomizeWidget::CustomizeObjNameRole).toString(); } else { - //说明这个是非自定义的 + // 说明这个是非自定义的 int level = itemLevel(item); if (0 == level) { SARibbonCategory* category = itemToCategory(item); @@ -623,8 +625,8 @@ QAction* SARibbonCustomizeWidget::PrivateData::itemToAction(QStandardItem* item) if (2 != itemLevel(item)) { return (nullptr); } - //这里要非常注意,SARibbonCustomizeWidget::CustomizeRole为true时,说明这个是自定义的内容, - //这时PointerRole里存放的是action指针,不是SARibbonPannelItem + // 这里要非常注意,SARibbonCustomizeWidget::CustomizeRole为true时,说明这个是自定义的内容, + // 这时PointerRole里存放的是action指针,不是SARibbonPannelItem QAction* act = nullptr; if (item->data(SARibbonCustomizeWidget::CustomizeRole).toBool()) { @@ -714,12 +716,12 @@ void SARibbonCustomizeWidget::setupActionsManager(SARibbonActionsManager* mgr) d_ptr->mAcionModel->uninstallActionsManager(); } d_ptr->mAcionModel->setupActionsManager(mgr); - //更新左边复选框 + // 更新左边复选框 QList< int > tags = mgr->actionTags(); ui->comboBoxActionIndex->clear(); for (int tag : qAsConst(tags)) { - if(mgr->tagName(tag).isEmpty()) + if (mgr->tagName(tag).isEmpty()) continue; ui->comboBoxActionIndex->addItem(mgr->tagName(tag), tag); } @@ -791,14 +793,12 @@ void SARibbonCustomizeWidget::updateModel(RibbonTreeShowType type) bool SARibbonCustomizeWidget::applys() { simplify(); - if (sa_customize_datas_apply(d_ptr->mCustomizeDatasCache, d_ptr->mRibbonBar) > 0) - { - //将临时操作存入已应用操作,并清空临时操作 + if (sa_customize_datas_apply(d_ptr->mCustomizeDatasCache, d_ptr->mRibbonBar) > 0) { + // 将临时操作存入已应用操作,并清空临时操作 makeActionsApplied(); clearCache(); return true; - } - else{ + } else { return false; } } @@ -845,9 +845,9 @@ bool SARibbonCustomizeWidget::toXml(QXmlStreamWriter* xml) const { QList< SARibbonCustomizeData > res = d_ptr->mOldCustomizeDatas; - if(isApplied()) + if (isApplied()) res << d_ptr->mCustomizeDatasApplied; - if(isCached()) + if (isCached()) res << d_ptr->mCustomizeDatasCache; res = SARibbonCustomizeData::simplify(res); @@ -871,7 +871,7 @@ bool SARibbonCustomizeWidget::toXml(const QString& xmlpath) const xml.setAutoFormatting(true); xml.setAutoFormattingIndent(2); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // QXmlStreamWriter always encodes XML in UTF-8. - xml.setCodec("utf-8"); //在writeStartDocument之前指定编码 + xml.setCodec("utf-8"); // 在writeStartDocument之前指定编码 #endif xml.writeStartDocument(); bool isOK = toXml(&xml); @@ -942,7 +942,7 @@ void SARibbonCustomizeWidget::fromXml(const QString& xmlpath) */ bool SARibbonCustomizeWidget::fromXml(QXmlStreamReader* xml, SARibbonBar* bar, SARibbonActionsManager* mgr) { - //先找到sa-ribbon-customize标签 + // 先找到sa-ribbon-customize标签 QList< SARibbonCustomizeData > cds = sa_customize_datas_from_xml(xml, mgr); return (sa_customize_datas_apply(cds, bar) > 0); @@ -1148,23 +1148,23 @@ void SARibbonCustomizeWidget::onPushButtonNewCategoryClicked() while (i.parent().isValid()) { i = i.parent(); } - //获取选中的最顶层item + // 获取选中的最顶层item row = i.row() + 1; } QStandardItem* ni = new QStandardItem(tr("new category[customize]%1").arg(++(d_ptr->mCustomizeCategoryCount))); ni->setData(0, SARibbonCustomizeWidget::LevelRole); d_ptr->mRibbonModel->insertRow(row, ni); - //设置新增的为选中 + // 设置新增的为选中 setSelectItem(ni); - //把动作插入动作列表中 + // 把动作插入动作列表中 SARibbonCustomizeData d = SARibbonCustomizeData::makeAddCategoryCustomizeData(ni->text(), ni->row(), SARibbonCustomizeWidget::PrivateData::makeRandomObjName( "category")); d_ptr->mCustomizeDatasCache.append(d); - ni->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //有CustomizeRole,必有CanCustomizeRole + ni->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); // 有CustomizeRole,必有CanCustomizeRole ni->setData(true, SARibbonCustomizeWidget::CustomizeRole); ni->setData(d.categoryObjNameValue, SARibbonCustomizeWidget::CustomizeObjNameRole); } @@ -1183,22 +1183,22 @@ void SARibbonCustomizeWidget::onPushButtonNewPannelClicked() ni->setData(1, SARibbonCustomizeWidget::LevelRole); if (0 == level) { - //说明是category,插入到最后 + // 说明是category,插入到最后 item->appendRow(ni); } else if (1 == level) { - //说明选择的是pannel,插入到此pannel之后 + // 说明选择的是pannel,插入到此pannel之后 QStandardItem* categoryItem = item->parent(); if (nullptr == categoryItem) { return; } categoryItem->insertRow(item->row() + 1, ni); } else { - //不符合就删除退出 + // 不符合就删除退出 delete ni; ni = nullptr; return; } - //查找category的object name + // 查找category的object name QStandardItem* categoryItem = ni->parent(); QString categoryObjName = ""; @@ -1210,7 +1210,7 @@ void SARibbonCustomizeWidget::onPushButtonNewPannelClicked() "pannel")); d_ptr->mCustomizeDatasCache.append(d); - ni->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //有CustomizeRole,必有CanCustomizeRole + ni->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); // 有CustomizeRole,必有CanCustomizeRole ni->setData(true, SARibbonCustomizeWidget::CustomizeRole); ni->setData(d.pannelObjNameValue, SARibbonCustomizeWidget::CustomizeObjNameRole); setSelectItem(ni); @@ -1234,13 +1234,13 @@ void SARibbonCustomizeWidget::onPushButtonRenameClicked() int level = itemLevel(item); if (0 == level) { - //改Category名 + // 改Category名 QString cateObjName = d_ptr->itemObjectName(item); SARibbonCustomizeData d = SARibbonCustomizeData::makeRenameCategoryCustomizeData(text, cateObjName); d_ptr->mCustomizeDatasCache.append(d); } else if (1 == level) { - QString cateObjName = d_ptr->itemObjectName(item->parent()); - QString pannelObjName = d_ptr->itemObjectName(item); + QString cateObjName = d_ptr->itemObjectName(item->parent()); + QString pannelObjName = d_ptr->itemObjectName(item); SARibbonCustomizeData d = SARibbonCustomizeData::makeRenamePannelCustomizeData(text, cateObjName, pannelObjName); d_ptr->mCustomizeDatasCache.append(d); } else { @@ -1261,10 +1261,10 @@ void SARibbonCustomizeWidget::onPushButtonAddClicked() int level = itemLevel(item); if (0 == level) { - //选中category不进行操作 + // 选中category不进行操作 return; } else if (2 == level) { - //选中action,添加到这个action之后,把item设置为pannel + // 选中action,添加到这个action之后,把item设置为pannel item = item->parent(); } QString pannelObjName = d_ptr->itemObjectName(item); @@ -1282,10 +1282,10 @@ void SARibbonCustomizeWidget::onPushButtonAddClicked() QStandardItem* actItem = new QStandardItem(act->icon(), act->text()); actItem->setData(2, SARibbonCustomizeWidget::LevelRole); - actItem->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); //有CustomizeRole,必有CanCustomizeRole + actItem->setData(true, SARibbonCustomizeWidget::CanCustomizeRole); // 有CustomizeRole,必有CanCustomizeRole actItem->setData(true, SARibbonCustomizeWidget::CustomizeRole); actItem->setData(act->objectName(), SARibbonCustomizeWidget::CustomizeObjNameRole); - actItem->setData(qintptr(act), SARibbonCustomizeWidget::PointerRole); //把action指针传入 + actItem->setData(qintptr(act), SARibbonCustomizeWidget::PointerRole); // 把action指针传入 item->appendRow(actItem); } @@ -1302,17 +1302,17 @@ void SARibbonCustomizeWidget::onPushButtonDeleteClicked() int level = itemLevel(item); if (0 == level) { - //删除category + // 删除category SARibbonCustomizeData d = SARibbonCustomizeData::makeRemoveCategoryCustomizeData(d_ptr->itemObjectName(item)); d_ptr->mCustomizeDatasCache.append(d); } else if (1 == level) { - //删除pannel + // 删除pannel QString catObjName = d_ptr->itemObjectName(item->parent()); QString pannelObjName = d_ptr->itemObjectName(item); SARibbonCustomizeData d = SARibbonCustomizeData::makeRemovePannelCustomizeData(catObjName, pannelObjName); d_ptr->mCustomizeDatasCache.append(d); } else if (2 == level) { - //删除Action + // 删除Action QString catObjName = d_ptr->itemObjectName(item->parent()->parent()); QString pannelObjName = d_ptr->itemObjectName(item->parent()); QAction* act = itemToAction(item); @@ -1327,17 +1327,17 @@ void SARibbonCustomizeWidget::onPushButtonDeleteClicked() d_ptr->mActionMgr); d_ptr->mCustomizeDatasCache.append(d); } - //执行删除操作 + // 执行删除操作 removeItem(item); - //删除后重新识别 + // 删除后重新识别 ui->pushButtonAdd->setEnabled(selectedAction() && isSelectedItemIsCustomize() && selectedRibbonLevel() > 0); ui->pushButtonDelete->setEnabled(isSelectedItemIsCustomize()); } void SARibbonCustomizeWidget::onListViewSelectClicked(const QModelIndex& index) { - //每次点击,判断是否可以进行操作,决定pushButtonAdd和pushButtonDelete的显示状态 - //点击了listview,判断treeview的状态 + // 每次点击,判断是否可以进行操作,决定pushButtonAdd和pushButtonDelete的显示状态 + // 点击了listview,判断treeview的状态 Q_UNUSED(index); ui->pushButtonAdd->setEnabled(isSelectedItemCanCustomize() && selectedRibbonLevel() > 0); ui->pushButtonDelete->setEnabled(isSelectedItemCanCustomize()); @@ -1346,7 +1346,7 @@ void SARibbonCustomizeWidget::onListViewSelectClicked(const QModelIndex& index) void SARibbonCustomizeWidget::onTreeViewResultClicked(const QModelIndex& index) { Q_UNUSED(index); - //每次点击,判断是否可以进行操作,决定pushButtonAdd和pushButtonDelete的显示状态 + // 每次点击,判断是否可以进行操作,决定pushButtonAdd和pushButtonDelete的显示状态 QStandardItem* item = selectedItem(); if (nullptr == item) { @@ -1355,8 +1355,9 @@ void SARibbonCustomizeWidget::onTreeViewResultClicked(const QModelIndex& index) int level = itemLevel(item); ui->pushButtonAdd->setEnabled(selectedAction() && (level > 0) && isItemCanCustomize(item)); - ui->pushButtonDelete->setEnabled(isItemCanCustomize(item)); //有CustomizeRole,必有CanCustomizeRole - ui->pushButtonRename->setEnabled(level != 2 || isItemCanCustomize(item)); // QAction 不能改名 , 有CustomizeRole,必有CanCustomizeRole + ui->pushButtonDelete->setEnabled(isItemCanCustomize(item)); // 有CustomizeRole,必有CanCustomizeRole + ui->pushButtonRename->setEnabled( + level != 2 || isItemCanCustomize(item)); // QAction 不能改名 , 有CustomizeRole,必有CanCustomizeRole } void SARibbonCustomizeWidget::onToolButtonUpClicked() @@ -1369,8 +1370,9 @@ void SARibbonCustomizeWidget::onToolButtonUpClicked() int level = itemLevel(item); if (0 == level) { - //移动category - SARibbonCustomizeData d = SARibbonCustomizeData::makeChangeCategoryOrderCustomizeData(d_ptr->itemObjectName(item), -1); + // 移动category + SARibbonCustomizeData d = SARibbonCustomizeData::makeChangeCategoryOrderCustomizeData(d_ptr->itemObjectName(item), + -1); d_ptr->mCustomizeDatasCache.append(d); int r = item->row(); item = d_ptr->mRibbonModel->takeItem(r); @@ -1393,7 +1395,7 @@ void SARibbonCustomizeWidget::onToolButtonUpClicked() if (!act) { return; } - QString key = d_ptr->mActionMgr->key(act); + QString key = d_ptr->mActionMgr->key(act); SARibbonCustomizeData d = SARibbonCustomizeData::makeChangeActionOrderCustomizeData(d_ptr->itemObjectName(categoryItem), d_ptr->itemObjectName(pannelItem), key, @@ -1406,7 +1408,7 @@ void SARibbonCustomizeWidget::onToolButtonUpClicked() pannelItem->insertRow(r - 1, item); } - //保持焦点,方便连续操作 + // 保持焦点,方便连续操作 setSelectItem(item); onTreeViewResultClicked(item->index()); } @@ -1431,8 +1433,9 @@ void SARibbonCustomizeWidget::onToolButtonDownClicked() int level = itemLevel(item); if (0 == level) { - //移动category - SARibbonCustomizeData d = SARibbonCustomizeData::makeChangeCategoryOrderCustomizeData(d_ptr->itemObjectName(item), 1); + // 移动category + SARibbonCustomizeData d = SARibbonCustomizeData::makeChangeCategoryOrderCustomizeData(d_ptr->itemObjectName(item), + 1); d_ptr->mCustomizeDatasCache.append(d); int r = item->row(); item = d_ptr->mRibbonModel->takeItem(item->row()); @@ -1455,7 +1458,7 @@ void SARibbonCustomizeWidget::onToolButtonDownClicked() if (!act) { return; } - QString key = d_ptr->mActionMgr->key(act); + QString key = d_ptr->mActionMgr->key(act); SARibbonCustomizeData d = SARibbonCustomizeData::makeChangeActionOrderCustomizeData(d_ptr->itemObjectName(categoryItem), d_ptr->itemObjectName(pannelItem), key, @@ -1468,7 +1471,7 @@ void SARibbonCustomizeWidget::onToolButtonDownClicked() pannelItem->insertRow(r + 1, item); } - //保持焦点,方便连续操作 + // 保持焦点,方便连续操作 setSelectItem(item); onTreeViewResultClicked(item->index()); } @@ -1482,8 +1485,10 @@ void SARibbonCustomizeWidget::onItemChanged(QStandardItem* item) if (0 == level) { if (item->isCheckable()) { - QString objname = d_ptr->itemObjectName(item); - SARibbonCustomizeData d = SARibbonCustomizeData::makeVisibleCategoryCustomizeData(objname, item->checkState() == Qt::Checked); + QString objname = d_ptr->itemObjectName(item); + SARibbonCustomizeData d = SARibbonCustomizeData::makeVisibleCategoryCustomizeData(objname, + item->checkState() + == Qt::Checked); d_ptr->mCustomizeDatasCache.append(d); } } diff --git a/src/SARibbonBar/SARibbonPannel.cpp b/src/SARibbonBar/SARibbonPannel.cpp index 1bc0d41b..523afeb3 100644 --- a/src/SARibbonBar/SARibbonPannel.cpp +++ b/src/SARibbonBar/SARibbonPannel.cpp @@ -690,10 +690,15 @@ QString SARibbonPannel::pannelName() const /** * @brief pannel的名称 * @param title 标题 + * @note 此函数会触发@sa pannelNameChanged 信号 */ void SARibbonPannel::setPannelName(const QString& title) { - d_ptr->setPannelName(title); + QString oldName = pannelName(); + if (oldName != title) { + d_ptr->setPannelName(title); + emit pannelNameChanged(title); + } } /** diff --git a/src/SARibbonBar/SARibbonPannel.h b/src/SARibbonBar/SARibbonPannel.h index 32a6b49c..73c4ec86 100644 --- a/src/SARibbonBar/SARibbonPannel.h +++ b/src/SARibbonBar/SARibbonPannel.h @@ -191,6 +191,12 @@ class SA_RIBBON_EXPORT SARibbonPannel : public QFrame */ void actionTriggered(QAction* action); + /** + * @brief pannel的标题发生了改变 + * @param n + */ + void pannelNameChanged(const QString& n); + public: // pannel高度推荐 static int pannelHeightHint(const QFontMetrics& fm, PannelLayoutMode layMode, int pannelTitleHeight); diff --git a/src/example/MainWindowExample/mainwindow.cpp b/src/example/MainWindowExample/mainwindow.cpp index 38f2f6f0..7f5eeb9e 100644 --- a/src/example/MainWindowExample/mainwindow.cpp +++ b/src/example/MainWindowExample/mainwindow.cpp @@ -133,10 +133,11 @@ MainWindow::MainWindow(QWidget* par) createContextCategory1(); PRINT_COST("add context1 category page"); + createContextCategory2(); PRINT_COST("add context2 category page"); - SARibbonQuickAccessBar* quickAccessBar = ribbon->quickAccessBar(); - createQuickAccessBar(quickAccessBar); + + createQuickAccessBar(); PRINT_COST("add quick access bar"); //! cn: @@ -159,6 +160,7 @@ MainWindow::MainWindow(QWidget* par) //! If the actions are created before, the actions added to the ribbon need to be manually managed in the ActionManager. //! The ActionManager can also manage actions not in the ribbon bar createActionsManager(); + setMinimumWidth(500); showMaximized(); setWindowIcon(QIcon(":/icon/icon/SA.svg")); @@ -278,10 +280,11 @@ void MainWindow::onActionCustomizeAndSaveTriggered(bool b) Q_UNUSED(b); SARibbonCustomizeDialog dlg(this); dlg.setupActionsManager(mActionsManager); - //如果启动时未应用上次修改,先应用再读取,保持本地数据和ui一致 - if(!mHasApplyCustomizeXmlFile) - { - auto res = QMessageBox::question(this, tr("question"), tr("Apply the last modification?\nIf not, local data will be reset")); + // 如果启动时未应用上次修改,先应用再读取,保持本地数据和ui一致 + if (!mHasApplyCustomizeXmlFile) { + auto res = QMessageBox::question(this, + tr("question"), + tr("Apply the last modification?\nIf not, local data will be reset")); if (res == QMessageBox::Yes) { onActionLoadCustomizeXmlFileTriggered(); return; @@ -295,13 +298,12 @@ void MainWindow::onActionCustomizeAndSaveTriggered(bool b) dlg.fromXml("customize.xml"); if (SARibbonCustomizeDialog::Accepted == dlg.exec()) { - //先apply - if(dlg.isCached()) + // 先apply + if (dlg.isCached()) dlg.applys(); - //无更改直接退出 - if(!dlg.isApplied()) - { + // 无更改直接退出 + if (!dlg.isApplied()) { mTextedit->append("no change to save"); return; } @@ -334,10 +336,11 @@ void MainWindow::onActionCustomizeAndSaveTriggered(bool b) void MainWindow::onActionCustomizeAndSaveWithApplyTriggered(bool b) { - //如果启动时未应用上次修改,先应用再读取,保持本地数据和ui一致 - if(!mHasApplyCustomizeXmlFile) - { - auto res = QMessageBox::question(this, tr("question"), tr("Apply the last modification?\nIf not, local data will be reset")); + // 如果启动时未应用上次修改,先应用再读取,保持本地数据和ui一致 + if (!mHasApplyCustomizeXmlFile) { + auto res = QMessageBox::question(this, + tr("question"), + tr("Apply the last modification?\nIf not, local data will be reset")); if (res == QMessageBox::Yes) { onActionLoadCustomizeXmlFileTriggered(); return; @@ -348,47 +351,41 @@ void MainWindow::onActionCustomizeAndSaveWithApplyTriggered(bool b) } QDialog dlg; - QVBoxLayout *main = new QVBoxLayout; + QVBoxLayout* main = new QVBoxLayout; dlg.setLayout(main); SARibbonCustomizeWidget* widgetForCustomize = new SARibbonCustomizeWidget(this, &dlg); widgetForCustomize->setupActionsManager(mActionsManager); main->addWidget(widgetForCustomize, 1); - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Save - | QDialogButtonBox::Cancel - | QDialogButtonBox::Apply); + QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Cancel + | QDialogButtonBox::Apply); main->addWidget(buttonBox); connect(buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept); connect(buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject); - connect(buttonBox, &QDialogButtonBox::clicked, &dlg, [=](QAbstractButton *button){ - + connect(buttonBox, &QDialogButtonBox::clicked, &dlg, [ = ](QAbstractButton* button) { auto role = buttonBox->buttonRole(button); - if(role == QDialogButtonBox::ApplyRole)//apply + if (role == QDialogButtonBox::ApplyRole) // apply { - if(widgetForCustomize->isCached()) - { + if (widgetForCustomize->isCached()) { widgetForCustomize->applys(); mTextedit->append("change applied"); - } - else - { + } else { mTextedit->append("no change to apply"); } } }); widgetForCustomize->fromXml("customize.xml"); - if (QDialog::Accepted == dlg.exec()){ - //先apply - if(widgetForCustomize->isCached()) + if (QDialog::Accepted == dlg.exec()) { + // 先apply + if (widgetForCustomize->isCached()) widgetForCustomize->applys(); - //无更改直接退出 - if(!widgetForCustomize->isApplied()) - { + // 无更改直接退出 + if (!widgetForCustomize->isApplied()) { mTextedit->append("no change to save"); return; } @@ -416,9 +413,8 @@ void MainWindow::onActionCustomizeAndSaveWithApplyTriggered(bool b) mTextedit->append("write xml:"); mTextedit->append(str); } - } - else { - //清除所有动作 + } else { + // 清除所有动作 widgetForCustomize->clear(); mTextedit->append("all changes clear, the applied changes will take no effect afer restart"); } @@ -470,15 +466,13 @@ void MainWindow::onActionLoadCustomizeXmlFileTriggered() { // 只能调用一次 if (!mHasApplyCustomizeXmlFile) { - if(!QFile::exists("customize.xml")) - { + if (!QFile::exists("customize.xml")) { mHasApplyCustomizeXmlFile = true; return; } QFile f("customize.xml"); qDebug() << "size of customize.xml : " << f.size(); - if(f.size() <= 0) - { + if (f.size() <= 0) { mHasApplyCustomizeXmlFile = true; return; } @@ -1127,6 +1121,21 @@ void MainWindow::createCategorySize(SARibbonCategory* page) QAction* actLargeFontText = createAction(tr("Larger Font Text"), ":/icon/icon/file.svg", "actLargeFontText"); pannel->addLargeAction(actLargeFontText); page->addPannel(pannel); + + // pannel 3 + pannel = new SARibbonPannel(tr("Grid")); + QWidget* w = new QWidget(); + QGridLayout* g = new QGridLayout(w); + QLabel* lab1 = new QLabel("value1:"); + QLineEdit* edi1 = new QLineEdit(w); + QLabel* lab2 = new QLabel("value2:"); + QLineEdit* edi2 = new QLineEdit(w); + g->addWidget(lab1, 0, 0); + g->addWidget(edi1, 0, 1); + g->addWidget(lab2, 1, 0); + g->addWidget(edi2, 1, 1); + pannel->addLargeWidget(w); + page->addPannel(pannel); } void MainWindow::createCategoryColor(SARibbonCategory* page) @@ -1404,8 +1413,10 @@ void MainWindow::createContextCategoryPage2(SARibbonCategory* page) SARibbonPannelItem::Small); } -void MainWindow::createQuickAccessBar(SARibbonQuickAccessBar* quickAccessBar) +void MainWindow::createQuickAccessBar() { + SARibbonQuickAccessBar* quickAccessBar = ribbonBar()->quickAccessBar(); + quickAccessBar->addAction(createAction("save", ":/icon/icon/save.svg", "save-quickbar")); quickAccessBar->addSeparator(); diff --git a/src/example/MainWindowExample/mainwindow.h b/src/example/MainWindowExample/mainwindow.h index 6091d04f..af288a9c 100644 --- a/src/example/MainWindowExample/mainwindow.h +++ b/src/example/MainWindowExample/mainwindow.h @@ -32,7 +32,7 @@ class MainWindow : public SARibbonMainWindow void createContextCategory2(); void createContextCategoryPage1(SARibbonCategory* page); void createContextCategoryPage2(SARibbonCategory* page); - void createQuickAccessBar(SARibbonQuickAccessBar* quickAccessBar); + void createQuickAccessBar(); void createRightButtonGroup(); // 创建ActionsManager,实现actions的管理以及SARibbonBar的自定义 void createActionsManager(); @@ -66,7 +66,7 @@ private slots: void onActionHideActionTriggered(bool on); // 切换所有action是否可见 void onActionVisibleAllTriggered(bool on); - //居中对齐checkbox的槽 + // 居中对齐checkbox的槽 void onCheckBoxAlignmentCenterClicked(bool checked); private: @@ -107,8 +107,8 @@ private slots: QAction* mOtherActionIcon1 { nullptr }; SARibbonPannel* mPannelVisbileExample { nullptr }; // - QAction* mActionVisibleAll { nullptr }; ///< 控制所有action是否可见的开关 - bool mHasApplyCustomizeXmlFile {false}; ///程序启动后是否应用上次修改 + QAction* mActionVisibleAll { nullptr }; ///< 控制所有action是否可见的开关 + bool mHasApplyCustomizeXmlFile { false }; /// 程序启动后是否应用上次修改 }; #endif // MAINWINDOW_H diff --git a/src/example/NormalMenuBarExample/CMakeLists.txt b/src/example/NormalMenuBarExample/CMakeLists.txt index 88ed430e..09f0312d 100644 --- a/src/example/NormalMenuBarExample/CMakeLists.txt +++ b/src/example/NormalMenuBarExample/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.5) SET(VERSION_SHORT 0.1) -project(NormalMenuBarExample VERSION ${VERSION_SHORT}) set(SARIBBON_EXPAMPLE_NAME NormalMenuBarExample) +project(${SARIBBON_EXPAMPLE_NAME} VERSION ${VERSION_SHORT}) set(CMAKE_INCLUDE_CURRENT_DIR ON) # 显示定义FRAMELESSHELPER_FEATURE_static_build为-1 否则库引用会失败 add_definitions(-DFRAMELESSHELPER_FEATURE_static_build=-1)