QtCanpool 3.3.0
载入中...
搜索中...
未找到
qxtabwidget.cpp
浏览该文件的文档.
1
5#include "qxtabwidget.h"
6#include "qxtabbar.h"
7
8#include <QStackedWidget>
9#include <QToolButton>
10#include <QBoxLayout>
11#include <QIcon>
12
14
15class QxTabWidgetPrivate
16{
17 QX_DECLARE_PUBLIC(QxTabWidget)
18public:
19 QxTabWidgetPrivate();
20
21 void init();
22 void updateTabBarPosition();
23public:
24 QxTabBar *m_tabBar;
25 QStackedWidget *m_stack;
26 QBoxLayout *m_layout;
27 QBoxLayout *m_tabLayout;
28 QxTabWidget::TabPosition m_pos;
29};
30
31QxTabWidgetPrivate::QxTabWidgetPrivate()
32 : m_pos(QxTabWidget::North)
33{
34}
35
36void QxTabWidgetPrivate::init()
37{
38 Q_Q(QxTabWidget);
39 m_tabBar = new QxTabBar(q);
40 m_tabBar->setTogglable(false);
41 m_tabBar->setObjectName(QLatin1String("qtc_qxtabwidget_tabbar"));
42
43 m_stack = new QStackedWidget(q);
44 m_stack->setObjectName(QLatin1String("qtc_qxtabwidget_stackedwidget"));
45 m_stack->setLineWidth(0);
46
47 m_tabLayout = new QBoxLayout(QBoxLayout::LeftToRight);
48 m_tabLayout->setContentsMargins(0, 0, 0, 0);
49 m_tabLayout->setSpacing(0);
50 m_tabLayout->addWidget(m_tabBar);
51 m_tabLayout->addStretch();
52
53 m_layout = new QBoxLayout(QBoxLayout::TopToBottom);
54 m_layout->setContentsMargins(0, 0, 0, 0);
55 m_layout->setSpacing(0);
56 m_layout->addLayout(m_tabLayout);
57 m_layout->addWidget(m_stack);
58 q->setLayout(m_layout);
59
60 QObject::connect(m_tabBar, SIGNAL(currentChanged(int)), m_stack, SLOT(setCurrentIndex(int)));
61 QObject::connect(m_stack, SIGNAL(currentChanged(int)), q, SIGNAL(currentChanged(int)));
62
63 updateTabBarPosition();
64}
65
66void QxTabWidgetPrivate::updateTabBarPosition()
67{
68 switch (m_pos) {
69 case QxTabWidget::North: {
70 m_layout->setDirection(QBoxLayout::TopToBottom);
71 m_tabLayout->setDirection(QBoxLayout::LeftToRight);
72 m_tabBar->setOrientation(Qt::Horizontal);
73 break;
74 }
75 case QxTabWidget::South: {
76 m_layout->setDirection(QBoxLayout::BottomToTop);
77 m_tabLayout->setDirection(QBoxLayout::LeftToRight);
78 m_tabBar->setOrientation(Qt::Horizontal);
79 break;
80 }
81 case QxTabWidget::West: {
82 m_layout->setDirection(QBoxLayout::LeftToRight);
83 m_tabLayout->setDirection(QBoxLayout::TopToBottom);
84 m_tabBar->setOrientation(Qt::Vertical);
85 break;
86 }
87 case QxTabWidget::East: {
88 m_layout->setDirection(QBoxLayout::RightToLeft);
89 m_tabLayout->setDirection(QBoxLayout::TopToBottom);
90 m_tabBar->setOrientation(Qt::Vertical);
91 break;
92 }
93 }
94}
95
96QxTabWidget::QxTabWidget(QWidget *parent)
97 : QWidget(parent)
98{
100 Q_D(QxTabWidget);
101 d->init();
102
103 setAttribute(Qt::WA_StyledBackground, true);
104}
105
110
111int QxTabWidget::addTab(QWidget *widget, const QString &label)
112{
113 return insertTab(-1, widget, label);
114}
115
116int QxTabWidget::addTab(QWidget *widget, const QIcon &icon, const QString &label)
117{
118 return insertTab(-1, widget, icon, label);
119}
120
121int QxTabWidget::insertTab(int index, QWidget *widget, const QString &label)
122{
123 return insertTab(index, widget, QIcon(), label);
124}
125
126int QxTabWidget::insertTab(int index, QWidget *widget, const QIcon &icon, const QString &label)
127{
128 Q_D(QxTabWidget);
129 if (!widget) {
130 return -1;
131 }
132 index = d->m_stack->insertWidget(index, widget);
133 d->m_tabBar->insertTab(index, icon, label);
134
135 return index;
136}
137
139{
140 Q_D(QxTabWidget);
141 if (QWidget *w = d->m_stack->widget(index)) {
142 d->m_stack->removeWidget(w);
143 d->m_tabBar->removeTab(index);
144 }
145}
146
148{
149 Q_D(const QxTabWidget);
150 return d->m_stack->currentIndex();
151}
152
154{
155 Q_D(const QxTabWidget);
156 return d->m_stack->currentWidget();
157}
158
159QWidget *QxTabWidget::widget(int index) const
160{
161 Q_D(const QxTabWidget);
162 return d->m_stack->widget(index);
163}
164
165int QxTabWidget::indexOf(QWidget *widget) const
166{
167 Q_D(const QxTabWidget);
168 return d->m_stack->indexOf(widget);
169}
170
172{
173 Q_D(const QxTabWidget);
174 return d->m_tabBar->count();
175}
176
177void QxTabWidget::setTabEnabled(int index, bool enable)
178{
179 Q_D(QxTabWidget);
180 d->m_tabBar->setTabEnabled(index, enable);
181}
182
183void QxTabWidget::setTabVisible(int index, bool visible)
184{
185 Q_D(QxTabWidget);
186 d->m_tabBar->setTabVisible(index, visible);
187}
188
190{
191 Q_D(const QxTabWidget);
192 return d->m_tabBar;
193}
194
196{
197 Q_D(const QxTabWidget);
198 return d->m_pos;
199}
200
202{
203 Q_D(QxTabWidget);
204 if (d->m_pos == pos) {
205 return;
206 }
207 d->m_pos = pos;
208 d->updateTabBarPosition();
209}
210
211QToolButton *QxTabWidget::addButton(const QString &text)
212{
213 return addButton(QIcon(), text);
214}
215
216QToolButton *QxTabWidget::addButton(const QIcon &icon, const QString &text)
217{
218 Q_D(QxTabWidget);
219 QToolButton *button = new QToolButton(this);
220 button->setText(text);
221 button->setToolTip(text);
222 button->setIcon(icon);
223 button->setIconSize(d->m_tabBar->iconSize());
224 button->setAutoRaise(true);
225 button->setFocusPolicy(Qt::NoFocus);
226 button->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
227 d->m_tabLayout->addWidget(button);
228 return button;
229}
230
232{
233 if (button == Q_NULLPTR) {
234 return;
235 }
236 Q_D(QxTabWidget);
237 d->m_tabLayout->removeWidget(button);
238 delete button;
239}
240
242{
243 Q_D(QxTabWidget);
244 d->m_tabBar->setCurrentIndex(index);
245}
246
247void QxTabWidget::setCurrentWidget(QWidget *widget)
248{
249 Q_D(QxTabWidget);
250 d->m_tabBar->setCurrentIndex(indexOf(widget));
251}
252
QToolButton * addButton(const QString &text)
QWidget * widget(int index) const
int currentIndex() const
void setTabVisible(int index, bool visible)
void setCurrentIndex(int index)
void removeButton(QToolButton *button)
int indexOf(QWidget *widget) const
TabPosition tabPosition() const
void removeTab(int index)
QWidget * currentWidget() const
QxTabBar * tabBar() const
void setCurrentWidget(QWidget *widget)
int insertTab(int index, QWidget *widget, const QString &label)
int addTab(QWidget *widget, const QString &label)
void setTabPosition(TabPosition)
void setTabEnabled(int index, bool enable)
#define QX_APP_END_NAMESPACE
#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_APP_BEGIN_NAMESPACE
#define QX_FINI_PRIVATE()
QColor text
QColor button