Difference between revisions of "QTabWidget with side shadows"

From Qt Wiki
Jump to: navigation, search
(Don't #include the module prefix)
(clean-up)
 
Line 1: Line 1:
{{Cleanup | reason=Auto-imported from ExpressionEngine.}}
 
 
 
[[Category:snippets]]
 
[[Category:snippets]]
 
= TabWidget =
 
 
 
This TabWidget class provides side shadows for its tabs.
 
This TabWidget class provides side shadows for its tabs.
  
Line 103: Line 98:
 
{
 
{
 
  background-color: qlineargradient(spread:pad,x1:0.680,y1:0.419545,x2:0,y2:0,stop:0 rgba(0, 0, 0, 0),stop:0.817778 rgba(80, 80, 80, 193),stop:1 rgba(80, 80, 80, 255));
 
  background-color: qlineargradient(spread:pad,x1:0.680,y1:0.419545,x2:0,y2:0,stop:0 rgba(0, 0, 0, 0),stop:0.817778 rgba(80, 80, 80, 193),stop:1 rgba(80, 80, 80, 255));
}</code>
+
}
 
+
</code>
==== Example ====
 

Latest revision as of 11:28, 24 March 2016

This TabWidget class provides side shadows for its tabs.

TabWidget.h

#ifndef TABWIDGET_H

  1. define TABWIDGET_H
  1. include <QTabWidget>

class QShowEvent;

class TabWidget : public QTabWidget {

Q_OBJECT

QWidget* leftShadow_;

QWidget* rightShadow_;

void showEvent( QShowEvent* event );

public:

explicit TabWidget( QWidget* parent = 0 );

private slots:

void tabChanged( int tabNumber );

};

  1. endif // TABWIDGET_H

TabWidget.cpp

#include "TabWidget.h"

  1. include <QTabBar>

TabWidget::TabWidget( QWidget* parent ) :

QTabWidget( parent ),
leftShadow_( new QWidget( this ) ),
rightShadow_( new QWidget( this ) )

{

connect( this,
SIGNAL (currentChanged( int ) ),
SLOT( tabChanged( int ) ) );
leftShadow_->setObjectName( "leftshadow" );
leftShadow_->setFixedWidth( 10 );
leftShadow_->setFixedHeight( tabBar()->height() );
rightShadow_->setObjectName( "rightshadow" );
rightShadow_->setFixedWidth( 10 );
rightShadow_->setFixedHeight( tabBar()->height() );

}

void TabWidget::tabChanged( int tabNumber ) {

const QTabBar* tabBar = this->tabBar();
const QRect tabRect = tabBar->tabRect( tabNumber );
if( tabNumber  0 )
   {
       leftShadow_->hide();
   }
   else
   {
       QPoint leftPos = tabBar->mapTo( this,
                                       tabRect.bottomLeft() );
       leftShadow_->setFixedHeight( tabRect.height() - 4 ); // '4' is the difference between active and inactive tabs heights
       leftShadow_->move( leftPos.x() - leftShadow_->width(),
                          leftPos.y() - leftShadow_->height() + 1  );
       leftShadow_->show();
   }
   if( tabNumber  ( count() - 1 ) )
{
rightShadow_->hide();
}
else
{
QPoint rightPos = tabBar->mapTo( this,
tabRect.bottomRight() );
rightShadow_->setFixedHeight( tabRect.height()- 4 );
rightShadow_->move( rightPos.x(),
rightPos.y()- rightShadow_->height() + 1 );
rightShadow_->show();
}

}

void TabWidget::showEvent ( QShowEvent * event ) {

Q_UNUSED( event )
tabChanged( currentIndex() );

}

Stylesheet for shadows

#leftshadow {

background-color: qlineargradient(spread:pad,x1:0.312,y1:0.419545,x2:1,y2:0,stop:0 rgba(0, 0, 0, 0),stop:0.817778 rgba(80, 80, 80, 193),stop:1 rgba(80, 80, 80, 255));

}

  1. rightshadow

{

background-color: qlineargradient(spread:pad,x1:0.680,y1:0.419545,x2:0,y2:0,stop:0 rgba(0, 0, 0, 0),stop:0.817778 rgba(80, 80, 80, 193),stop:1 rgba(80, 80, 80, 255));

}