refactor tabs to support centered icons
This commit is contained in:
parent
0229ce9891
commit
4cfd16485c
|
@ -126,23 +126,16 @@ QColor Tabs::textColor() const
|
||||||
|
|
||||||
void Tabs::addTab(const QString &text)
|
void Tabs::addTab(const QString &text)
|
||||||
{
|
{
|
||||||
Q_D(Tabs);
|
createTab(text);
|
||||||
|
|
||||||
Tab *tab = new Tab(text);
|
|
||||||
tab->setCornerRadius(0);
|
|
||||||
tab->setRippleStyle(Material::CenteredRipple);
|
|
||||||
tab->setRole(Material::Primary);
|
|
||||||
tab->setBackgroundMode(Qt::OpaqueMode);
|
|
||||||
tab->setPeakOpacity(0.25);
|
|
||||||
|
|
||||||
d->tabLayout->addWidget(tab);
|
|
||||||
|
|
||||||
if (-1 == d->tab) {
|
|
||||||
d->tab = 0;
|
|
||||||
d->inkBar->refreshGeometry();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(tab, SIGNAL(clicked()), this, SLOT(switchTab()));
|
void Tabs::addTab(const QString &text, const QIcon &icon)
|
||||||
|
{
|
||||||
|
Q_D(Tabs);
|
||||||
|
|
||||||
|
Tab *tab = createTab(text);
|
||||||
|
tab->setIcon(icon);
|
||||||
|
tab->setIconSize(QSize(24, 24));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tabs::setRippleStyle(Material::RippleStyle style)
|
void Tabs::setRippleStyle(Material::RippleStyle style)
|
||||||
|
@ -202,3 +195,26 @@ void Tabs::switchTab()
|
||||||
emit currentChanged(d->tab);
|
emit currentChanged(d->tab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tab *Tabs::createTab(const QString &text)
|
||||||
|
{
|
||||||
|
Q_D(Tabs);
|
||||||
|
|
||||||
|
Tab *tab = new Tab(text);
|
||||||
|
tab->setCornerRadius(0);
|
||||||
|
tab->setRippleStyle(Material::CenteredRipple);
|
||||||
|
tab->setRole(Material::Primary);
|
||||||
|
tab->setBackgroundMode(Qt::OpaqueMode);
|
||||||
|
tab->setPeakOpacity(0.25);
|
||||||
|
|
||||||
|
d->tabLayout->addWidget(tab);
|
||||||
|
|
||||||
|
if (-1 == d->tab) {
|
||||||
|
d->tab = 0;
|
||||||
|
d->inkBar->refreshGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(tab, SIGNAL(clicked()), this, SLOT(switchTab()));
|
||||||
|
|
||||||
|
return tab;
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "lib/theme.h"
|
#include "lib/theme.h"
|
||||||
|
|
||||||
class TabsPrivate;
|
class TabsPrivate;
|
||||||
|
class Tab;
|
||||||
|
|
||||||
class Tabs : public QWidget
|
class Tabs : public QWidget
|
||||||
{
|
{
|
||||||
|
@ -31,6 +32,7 @@ public:
|
||||||
QColor textColor() const;
|
QColor textColor() const;
|
||||||
|
|
||||||
void addTab(const QString &text);
|
void addTab(const QString &text);
|
||||||
|
void addTab(const QString &text, const QIcon &icon);
|
||||||
|
|
||||||
void setRippleStyle(Material::RippleStyle style);
|
void setRippleStyle(Material::RippleStyle style);
|
||||||
|
|
||||||
|
@ -52,6 +54,8 @@ private slots:
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_COPY(Tabs)
|
Q_DISABLE_COPY(Tabs)
|
||||||
Q_DECLARE_PRIVATE(Tabs)
|
Q_DECLARE_PRIVATE(Tabs)
|
||||||
|
|
||||||
|
Tab *createTab(const QString &text);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TABS_H
|
#endif // TABS_H
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#include "tabs_internal.h"
|
#include "tabs_internal.h"
|
||||||
#include <QLayout>
|
#include <QLayout>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QStylePainter>
|
||||||
|
#include <QStyleOptionButton>
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
|
#include <QDebug>
|
||||||
#include <QPropertyAnimation>
|
#include <QPropertyAnimation>
|
||||||
|
#include <QtSvg/QSvgRenderer>
|
||||||
#include "tabs.h"
|
#include "tabs.h"
|
||||||
|
|
||||||
TabsInkBar::TabsInkBar(Tabs *parent)
|
TabsInkBar::TabsInkBar(Tabs *parent)
|
||||||
|
@ -101,7 +105,65 @@ Tab::~Tab()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSize Tab::sizeHint() const
|
||||||
|
{
|
||||||
|
if (icon().isNull()) {
|
||||||
|
return FlatButton::sizeHint();
|
||||||
|
} else {
|
||||||
|
return QSize(40, iconSize().height() + 48);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Tab::paintEvent(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event)
|
||||||
|
|
||||||
|
//FlatButton::paintEvent(event);
|
||||||
|
|
||||||
|
QPainter painter(this);
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing);
|
||||||
|
|
||||||
|
QBrush brush;
|
||||||
|
brush.setStyle(Qt::SolidPattern);
|
||||||
|
brush.setColor(backgroundColor());
|
||||||
|
painter.setOpacity(1);
|
||||||
|
painter.setBrush(brush);
|
||||||
|
painter.setPen(Qt::NoPen);
|
||||||
|
painter.drawRect(rect());
|
||||||
|
|
||||||
|
QStylePainter style(this);
|
||||||
|
|
||||||
|
QStyleOptionButton option;
|
||||||
|
initStyleOption(&option);
|
||||||
|
option.features |= QStyleOptionButton::Flat;
|
||||||
|
option.iconSize = QSize(-1, -1); // Let's not draw the icon right now
|
||||||
|
|
||||||
|
style.drawControl(QStyle::CE_PushButtonLabel, option);
|
||||||
|
|
||||||
|
|
||||||
|
if (!icon().isNull()) {
|
||||||
|
const QSize &size = iconSize();
|
||||||
|
icon().paint(&painter,
|
||||||
|
QRect(QPoint((width()-size.width())/2, 0), size),
|
||||||
|
Qt::AlignCenter,
|
||||||
|
QIcon::Normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
QPen pen;
|
||||||
|
pen.setColor(Qt::red);
|
||||||
|
pen.setWidth(2);
|
||||||
|
painter.setPen(pen);
|
||||||
|
|
||||||
|
painter.drawRect(rect());
|
||||||
|
}
|
||||||
|
|
||||||
void Tab::init()
|
void Tab::init()
|
||||||
{
|
{
|
||||||
setMinimumHeight(50);
|
setMinimumHeight(50);
|
||||||
|
|
||||||
|
QFont fnt(font());
|
||||||
|
fnt.setStyleName("Normal");
|
||||||
|
setFont(fnt);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,11 @@ public:
|
||||||
explicit Tab(QString text, QWidget *parent = 0);
|
explicit Tab(QString text, QWidget *parent = 0);
|
||||||
~Tab();
|
~Tab();
|
||||||
|
|
||||||
|
QSize sizeHint() const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_COPY(Tab)
|
Q_DISABLE_COPY(Tab)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QStackedLayout>
|
#include <QStackedLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QIcon>
|
||||||
#include "tabsexamples.h"
|
#include "tabsexamples.h"
|
||||||
#include "components/tabs.h"
|
#include "components/tabs.h"
|
||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
|
@ -84,9 +85,9 @@ TabsExamples::TabsExamples(QWidget *parent)
|
||||||
layout->addLayout(stack);
|
layout->addLayout(stack);
|
||||||
layout->setContentsMargins(0, 0, 0, 0);
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
tabs->addTab("First");
|
tabs->addTab("Listen", QIcon("../qt-material-widgets/ic_volume_up_white_24px.svg"));
|
||||||
tabs->addTab("Second");
|
tabs->addTab("Talk", QIcon("../qt-material-widgets/ic_message_white_24px.svg"));
|
||||||
tabs->addTab("Third");
|
tabs->addTab("Eat", QIcon("../qt-material-widgets/ic_local_dining_white_24px.svg"));
|
||||||
|
|
||||||
QScrollArea *area = new QScrollArea;
|
QScrollArea *area = new QScrollArea;
|
||||||
area->setWidget(widget);
|
area->setWidget(widget);
|
||||||
|
|
Loading…
Reference in New Issue