QtCanpool 3.3.0
载入中...
搜索中...
未找到
ribboncustomizedialog.cpp
浏览该文件的文档.
1
7#include <QFile>
8#include <QXmlStreamReader>
9#include <QApplication>
10#include <QPushButton>
11#include <QSpacerItem>
12#include <QVBoxLayout>
13
15
19class RibbonCustomizeDialogUi
20{
21public:
22 RibbonCustomizeWidget *customWidget;
23 QVBoxLayout *verticalLayoutMain;
24 QHBoxLayout *horizontalLayoutButtonGroup;
25 QPushButton *pushButtonCancel;
26 QPushButton *pushButtonOk;
27 QSpacerItem *spacerItemleft;
28
29 void setupUi(RibbonBar *ribbonBar, QWidget *customizeDialog)
30 {
31 if (customizeDialog->objectName().isEmpty()) {
32 customizeDialog->setObjectName(QStringLiteral("RibbonCustomizeDialog"));
33 }
34 customizeDialog->resize(800, 600);
35 verticalLayoutMain = new QVBoxLayout(customizeDialog);
36 verticalLayoutMain->setObjectName(QStringLiteral("verticalLayoutMain"));
37
38 customWidget = new RibbonCustomizeWidget(ribbonBar, customizeDialog);
39 customWidget->setObjectName(QStringLiteral("customWidget"));
40 verticalLayoutMain->addWidget(customWidget);
41
42 horizontalLayoutButtonGroup = new QHBoxLayout();
43 horizontalLayoutButtonGroup->setObjectName(QStringLiteral("horizontalLayoutButtonGroup"));
44
45 spacerItemleft = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
46 horizontalLayoutButtonGroup->addItem(spacerItemleft);
47
48 pushButtonOk = new QPushButton(customizeDialog);
49 pushButtonOk->setObjectName(QStringLiteral("pushButtonOk"));
50 horizontalLayoutButtonGroup->addWidget(pushButtonOk);
51
52 pushButtonCancel = new QPushButton(customizeDialog);
53 pushButtonCancel->setObjectName(QStringLiteral("pushButtonCancel"));
54 horizontalLayoutButtonGroup->addWidget(pushButtonCancel);
55
56 verticalLayoutMain->addItem(horizontalLayoutButtonGroup);
57 retranslateUi(customizeDialog);
58 }
59
60 void retranslateUi(QWidget *customizeDialog)
61 {
62 customizeDialog->setWindowTitle(
63 QApplication::translate("RibbonCustomizeDialog", "Customize Dialog", Q_NULLPTR));
64 pushButtonOk->setText(QApplication::translate("RibbonCustomizeDialog", "OK", Q_NULLPTR));
65 pushButtonCancel->setText(QApplication::translate("RibbonCustomizeDialog", "Cancel", Q_NULLPTR));
66 }
67};
68
70
71RibbonCustomizeDialog::RibbonCustomizeDialog(RibbonBar *bar, QWidget *p, Qt::WindowFlags f)
72 : QDialog(p, f)
73 , ui(new RibbonCustomizeDialogUi)
74{
75 ui->setupUi(bar, this);
76
77 connect(ui->pushButtonOk, &QPushButton::clicked, this, [this]() {
78 ui->customWidget->apply();
79 accept();
80 });
81 connect(ui->pushButtonCancel, &QPushButton::clicked, this, &QDialog::reject);
82}
83
85{
86 ui->customWidget->setupActionsManager(mgr);
87}
88
90{
91 // FIXME: 打开对话框,新建页后,应用,然后关闭对话框,不写文件,定制临时数据丢失
92 // 当再次打开对话框,删除新建的页后,应用,然后选择ok,定制的临时数据都是删除数据,实际上要删除的对象已经不存在了,但是还会写到文件中
93 // TODO: 先去掉应用按钮,未来应该私有化该接口
94 return ui->customWidget->apply();
95}
96
98{
99 ui->customWidget->clear();
100}
101
102bool RibbonCustomizeDialog::toXml(QXmlStreamWriter *xml) const
103{
104 return ui->customWidget->toXml(xml);
105}
106
107bool RibbonCustomizeDialog::toXml(const QString &xmlpath) const
108{
109 return ui->customWidget->toXml(xmlpath);
110}
111
112void RibbonCustomizeDialog::fromXml(QXmlStreamReader *xml)
113{
114 ui->customWidget->fromXml(xml);
115}
116
117void RibbonCustomizeDialog::fromXml(const QString &xmlpath)
118{
119 ui->customWidget->fromXml(xmlpath);
120}
121
123{
124 Q_UNUSED(e);
125 bool isModal = this->isModal();
126 ui->pushButtonCancel->setVisible(isModal);
127 ui->pushButtonOk->setVisible(isModal);
128}
129
130bool QxRibbonCustomizeApplyFromXmlFile(const QString &filePath, RibbonBar *bar, RibbonActionsManager *mgr)
131{
132 QFile f(filePath);
133
134 if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) {
135 return false;
136 }
137 f.seek(0);
138 QXmlStreamReader xml(&f);
139
140 return RibbonCustomizeWidget::fromXml(&xml, bar, mgr);
141}
142
用于管理 Ribbon 的所有 Action
RibbonBar 继承 QMenuBar, 在 RibbonWindow 中直接替换了原来的 QMenuBar
Definition ribbonbar.h:99
bool toXml(QXmlStreamWriter *xml) const
void showEvent(QShowEvent *e) override
void setupActionsManager(RibbonActionsManager *mgr)
void fromXml(QXmlStreamReader *xml)
void fromXml(QXmlStreamReader *xml)
从xml中加载QList<RibbonCustomizeData>
bool QxRibbonCustomizeApplyFromXmlFile(const QString &filePath, RibbonBar *bar, RibbonActionsManager *mgr)
直接加载xml自定义ribbon配置文件用于ribbon的自定义显示
#define Q_NULLPTR
Copyleft (C) 2025 maminjie canpool@163.com SPDX-License-Identifier: MulanPSL-2.0
#define QX_RIBBON_END_NAMESPACE
#define QX_RIBBON_BEGIN_NAMESPACE