-1

need that when a mouse ( with press button ) is on top of tab, it gets activated. How is it possible.

Daniel Hedberg
  • 5,677
  • 4
  • 36
  • 61
nish
  • 1,008
  • 4
  • 17
  • 34

2 Answers2

0

Just create your own EventFilter.

// TabBarEventHandler
class TabBarEventHandler : public QObject
{
public:
    explicit TabBarEventHandler( QTabWidget * tabWidget );
    virtual ~TabBarEventHandler();

    void Initialize();

protected:
    QTabWidget  * mTabWidget;

    virtual bool eventFilter( QObject* obj, QEvent* event ) override;
};


// TabBarEventHandler
TabBarEventHandler::TabBarEventHandler( TabBar * tabWidget ) 
    : mTabWidget( tabWidget )
{
}

TabBarEventHandler::~TabBarEventHandler()
{
    mTabWidget->tabBar()->removeEventFilter( this );
}

void TabBarEventHandler::Initialize()
{
    mTabWidget->tabBar()->installEventFilter( this );
}

bool TabBarEventHandler::eventFilter(QObject* obj, QEvent* event)
{
    qDebug() << event->type();

    return QObject::eventFilter( obj, event );
}

void TabBarEventHandler::timerEvent(QTimerEvent* event)
{
}

And in your widget:

MyTabWidget::MyTabWidget( QWidget * parent ) : QTabWidget( parent )
{
    mEventHandler = new TabBarEventHandler( this );
    mEventHandler->Initialize();
}

MyTabWidget::~MyTabWidget()
{
    delete mEventHandler;
}

The debug output:

QEvent::Type(HoverMove) QEvent::Type(HoverMove) QEvent::Type(MouseButtonPress) QEvent::Type(InputMethodQuery) QEvent::Type(InputMethodQuery) QEvent::Type(InputMethodQuery) QEvent::Type(Paint) QEvent::Type(Paint) QEvent::Type(MouseButtonRelease) QEvent::Type(HoverMove) QEvent::Type(HoverMove) QEvent::Type(Leave)

Jean-François Corbett
  • 37,420
  • 30
  • 139
  • 188
Platipus
  • 1
  • 2
0

You can intercept the mouseMoveEvent event from the QTabBar.

Edit: How To

To intercept it Qt offers you a great functionalities. You can install an event filter on a widget you have created so it will be able to get filtered event of its child widgets. See documentation about the installEventFilter function.

Patrice Bernassola
  • 14,136
  • 6
  • 46
  • 59
  • considering i am relatively moderate. How may i do so. Should i create a subclass of qtabbar like the droparea example on the net. suggest. thank you sharing so far. – nish Apr 20 '11 at 10:45
  • You can subclass QTabBar but Qt offers an other simplier solution to get event of child widget: See my updated answer – Patrice Bernassola Apr 20 '11 at 12:35