简单的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);
}
posted @ 2011-06-29 16:21  eesher  阅读(959)  评论(0编辑  收藏  举报