简单的qt tabbar

signals : void currentChange(int);

public function :  int addTab(const char*);

         void setTabText(int, const char*);

tabwidget.h

ContractedBlock.gif ExpandedBlockStart.gif 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

ContractedBlock.gif ExpandedBlockStart.gif 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);
}

转载于:https://www.cnblogs.com/eesher/archive/2011/06/29/2093513.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值