QtCanpool 3.3.0
载入中...
搜索中...
未找到
ribbonpagecontext.cpp
浏览该文件的文档.
1
5#include "ribbonpagecontext.h"
6
7#include <QDebug>
8#include <QList>
9#include <QVariant>
10
12
13/* RibbonPageData */
14class RibbonPageData
15{
16public:
17 RibbonPage *page;
18};
19
20/* RibbonPageContextPrivate */
21class RibbonPageContextPrivate
22{
23 QX_DECLARE_PUBLIC(RibbonPageContext)
24public:
25 QList<RibbonPageData> pageDataList;
26 QColor contextColor;
27 QString contextTitle;
28};
29
30RibbonPageContext::RibbonPageContext(QWidget *parent)
31 : QObject(parent){QX_INIT_PRIVATE(RibbonPageContext)}
32
34
36 * RibbonPageContext::addPage(const QString &title)
37{
39 RibbonPageData pageData;
41
43 page->setPageName(title);
44 pageData.page = page;
45 d->pageDataList.append(pageData);
46 page->installEventFilter(this);
47 Q_EMIT pageAdded(page);
48
49 return page;
50}
51
53{
54 Q_D(const RibbonPageContext);
55 return d->pageDataList.count();
56}
57
58void RibbonPageContext::setContextColor(const QColor color)
59{
61 d->contextColor = color;
62}
63
65{
66 Q_D(const RibbonPageContext);
67 return d->contextColor;
68}
69
71{
72 return qobject_cast<QWidget *>(parent());
73}
74
75bool RibbonPageContext::eventFilter(QObject *watched, QEvent *e)
76{
77 if (Q_NULLPTR == watched) {
78 return false;
79 }
80 switch (e->type()) {
81 case QEvent::Close: {
82 RibbonPage *page = qobject_cast<RibbonPage *>(watched);
83 if (page) {
84#ifdef QX_RIBBON_DEBUG_HELP_DRAW
85 qDebug() << " -----------> close event";
86#endif
88 }
89 } break;
90
91 default:
92 break;
93 }
94 return false;
95}
96
98{
99 Q_D(const RibbonPageContext);
100 return d->contextTitle;
101}
102
107void RibbonPageContext::setContextTitle(const QString &title)
108{
110 d->contextTitle = title;
111}
112
114{
116 if (index < 0 || index >= d->pageDataList.size()) {
117 return Q_NULLPTR;
118 }
119 return d->pageDataList[index].page;
120}
121
122QList<RibbonPage *> RibbonPageContext::pageList() const
123{
124 Q_D(const RibbonPageContext);
125 QList<RibbonPage *> res;
126
127 for (const RibbonPageData &data : d->pageDataList) {
128 res.append(data.page);
129 }
130 return res;
131}
132
139{
141 for (int i = 0; i < d->pageDataList.size(); ++i) {
142 if (d->pageDataList[i].page == page) {
143 d->pageDataList.takeAt(i);
144 Q_EMIT pageRemoved(page);
145 return true;
146 }
147 }
148 return false;
149}
150
管理上下文标签的类
RibbonPage * page(int index)
QList< RibbonPage * > pageList() const
void pageRemoved(RibbonPage *page)
RibbonPage * addPage(const QString &title)
bool takePage(RibbonPage *page)
移除这个page,这时RibbonPageContext不再管理这个page
void pageAdded(RibbonPage *page)
void setContextColor(const QColor color)
virtual bool eventFilter(QObject *watched, QEvent *e) override
void setContextTitle(const QString &title)
设置上下文标签的标题,标题仅在 office 模式下显示 RibbonBar::RibbonStyle
一项 ribbon tab 页
Definition ribbonpage.h:30
void markIsPageContext(bool isPageContext=true)
标记这个是上下文标签
void setPageName(const QString &title)
#define QX_INIT_PRIVATE(Class)
#define QX_DECLARE_PUBLIC(Class)
#define Q_NULLPTR
Copyleft (C) 2025 maminjie canpool@163.com SPDX-License-Identifier: MulanPSL-2.0
#define QX_FINI_PRIVATE()
#define QX_RIBBON_END_NAMESPACE
#define QX_RIBBON_BEGIN_NAMESPACE