简单的qt tabbar
signals : void currentChange(int);
public function : int addTab(const char*);
void setTabText(int, const char*);
tabwidget.h
View Code
/*
* Filename: tabwidget.h
* Created: 2011年06月14日 14时03分27秒
* Author: Eesher (E)
*/
#ifndef TABWIDGET_H
#define TABWIDGET_H
#include <QtGui>
#include <QObject>
class TabWidget : public QWidget
{
Q_OBJECT
public:
TabWidget(QWidget* parent = 0);
int addTab(const char*);
void setTabText(int, const char*);
private:
QColor m_fontColor;
QColor m_barColor;
QColor m_tabColor;
int m_index;
QSize m_tabsize;
QList<const char*> m_tabs;
signals:
void currentChange(int);
protected:
void paintEvent(QPaintEvent*);
void mousePressEvent(QMouseEvent*);
};
#endif
tabwidget.cpp
View Code
/*
* Filename: tabwidget.cpp
* Created: 2011年06月14日 14时02分17秒
* Author: Eesher (E)
*/
#include "tabwidget.h"
TabWidget::TabWidget(QWidget* parent)
: QWidget(parent)
{
setMinimumHeight(40);
m_fontColor = QColor(69, 78, 85);
m_barColor = QColor(166, 186, 201);
m_tabColor = QColor(216, 227, 235);
m_index = 0;
m_tabsize = QSize(60, 40);
m_tabs.append("tab1");
m_tabs.append("tab2");
}
void TabWidget::paintEvent(QPaintEvent*)
{
QPainter painter(this);
// QRect bar_rect = rect();
painter.setBrush(Qt::NoBrush);
QRect bar_rect(0, 5, m_tabsize.width()*m_tabs.count(), m_tabsize.height());
painter.setPen(QPen(QBrush(m_barColor), 0.01));
painter.setBrush(QBrush(m_barColor));
painter.drawRect(bar_rect);
QRect active_rect(QPoint(m_tabsize.width()*m_index, 0), m_tabsize);
painter.setPen(QPen(QBrush(m_tabColor), 0.01));
painter.setBrush(QBrush(m_tabColor));
painter.drawRect(active_rect);
QTextCodec* codec = QTextCodec::codecForName("UTF-8");
QRect button_rect(QPoint(0, 0), m_tabsize);
painter.setPen(QPen(QBrush(m_fontColor), 0));
painter.setFont(font());
for(int i = 0; i < m_tabs.count(); i++)
painter.drawText(m_tabsize.width()*i, 0, button_rect.width(), button_rect.height(), Qt::AlignCenter, codec->toUnicode(m_tabs.at(i)));
}
void TabWidget::mousePressEvent(QMouseEvent* e)
{
int x = e->x();
int i = x/m_tabsize.width();
if(i > m_tabs.count()-1)
return;
m_index = i;
emit currentChange(m_index);
update();
}
int TabWidget::addTab(const char* text)
{
m_tabs << text;
return m_tabs.count()-1;
}
void TabWidget::setTabText(int index, const char* text)
{
m_tabs.replace(index, text);
}