8#include <QStackedWidget>
15class QxTabWidgetPrivate
22 void updateTabBarPosition();
25 QStackedWidget *m_stack;
27 QBoxLayout *m_tabLayout;
28 QxTabWidget::TabPosition m_pos;
31QxTabWidgetPrivate::QxTabWidgetPrivate()
32 : m_pos(QxTabWidget::North)
36void QxTabWidgetPrivate::init()
39 m_tabBar =
new QxTabBar(q);
40 m_tabBar->setTogglable(
false);
41 m_tabBar->setObjectName(QLatin1String(
"qtc_qxtabwidget_tabbar"));
43 m_stack =
new QStackedWidget(q);
44 m_stack->setObjectName(QLatin1String(
"qtc_qxtabwidget_stackedwidget"));
45 m_stack->setLineWidth(0);
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();
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);
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)));
63 updateTabBarPosition();
66void QxTabWidgetPrivate::updateTabBarPosition()
69 case QxTabWidget::North: {
70 m_layout->setDirection(QBoxLayout::TopToBottom);
71 m_tabLayout->setDirection(QBoxLayout::LeftToRight);
72 m_tabBar->setOrientation(Qt::Horizontal);
75 case QxTabWidget::South: {
76 m_layout->setDirection(QBoxLayout::BottomToTop);
77 m_tabLayout->setDirection(QBoxLayout::LeftToRight);
78 m_tabBar->setOrientation(Qt::Horizontal);
81 case QxTabWidget::West: {
82 m_layout->setDirection(QBoxLayout::LeftToRight);
83 m_tabLayout->setDirection(QBoxLayout::TopToBottom);
84 m_tabBar->setOrientation(Qt::Vertical);
87 case QxTabWidget::East: {
88 m_layout->setDirection(QBoxLayout::RightToLeft);
89 m_tabLayout->setDirection(QBoxLayout::TopToBottom);
90 m_tabBar->setOrientation(Qt::Vertical);
96QxTabWidget::QxTabWidget(QWidget *parent)
103 setAttribute(Qt::WA_StyledBackground,
true);
132 index = d->m_stack->insertWidget(index,
widget);
133 d->m_tabBar->insertTab(index, icon, label);
141 if (QWidget *w = d->m_stack->widget(index)) {
142 d->m_stack->removeWidget(w);
143 d->m_tabBar->removeTab(index);
150 return d->m_stack->currentIndex();
156 return d->m_stack->currentWidget();
162 return d->m_stack->widget(index);
168 return d->m_stack->indexOf(
widget);
174 return d->m_tabBar->count();
180 d->m_tabBar->setTabEnabled(index, enable);
186 d->m_tabBar->setTabVisible(index, visible);
204 if (d->m_pos == pos) {
208 d->updateTabBarPosition();
219 QToolButton *
button =
new QToolButton(
this);
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);
237 d->m_tabLayout->removeWidget(
button);
244 d->m_tabBar->setCurrentIndex(index);
#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()