QTabWidget with side shadows: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Decode HTML entity names)
(clean-up)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Cleanup | reason=Auto-imported from ExpressionEngine.}}
[[Category:snippets]]
 
[[Category:snippets]][toc align_right="yes" depth="4"]
 
= TabWidget =
 
This TabWidget class provides side shadows for its tabs.
This TabWidget class provides side shadows for its tabs.


Line 12: Line 7:
#define TABWIDGET_H
#define TABWIDGET_H


#include <QtGui/QTabWidget>
#include <QTabWidget>
class QShowEvent;
class QShowEvent;


Line 37: Line 32:


<code>#include "TabWidget.h"
<code>#include "TabWidget.h"
#include <QtGui/QTabBar>
#include <QTabBar>


TabWidget::TabWidget( QWidget* parent ) :
TabWidget::TabWidget( QWidget* parent ) :
Line 67: Line 62:
         QPoint leftPos = tabBar->mapTo( this,
         QPoint leftPos = tabBar->mapTo( this,
                                         tabRect.bottomLeft() );
                                         tabRect.bottomLeft() );
         leftShadow_->setFixedHeight( tabRect.height() - 4 ); // &#39;4&#39; is the difference between active and inactive tabs heights
         leftShadow_->setFixedHeight( tabRect.height() - 4 ); // '4' is the difference between active and inactive tabs heights
         leftShadow_->move( leftPos.x() - leftShadow_->width(),
         leftShadow_->move( leftPos.x() - leftShadow_->width(),
                           leftPos.y() - leftShadow_->height() + 1  );
                           leftPos.y() - leftShadow_->height() + 1  );
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
#define TABWIDGET_H

#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 );
};

#endif // TABWIDGET_H

TabWidget.cpp

#include "TabWidget.h"
#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));
}
#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));
}