Hallo,
ich hoffe, mir kann hier jemand bei meinem Problem helfen:
Ich habe ein QTabWidget mit verschiedenen Tabs. Nun möchte ich abfangen, wenn der Benutzer auf den aktuell aktiven Tab (current Tab) klickt und dann die Daten neu laden. Kennt jemand eine Möglichkeit, wie ich das mitbekommen kann?
Dankeschön.
Bastian
[solved] QTabWidget: Klick auf aktiven Tab abfangen
[solved] QTabWidget: Klick auf aktiven Tab abfangen
Zuletzt geändert von baszim am 6. Dezember 2013 12:19, insgesamt 1-mal geändert.
Re: QTabWidget: Klick auf aktiven Tab abfangen
Hi
Um das zu realisieren musst du selbstständig auf das MouseButtonRelease event deiner TabBar reagieren.
Am einfachsten ist es wen du hierfür einen EventFilter verwendest.
[1] Installiere den EventFilter in deiner TabBar
[2] Prüfe ob das ankommende Event von deiner TabBar ist
[3] Prüfe ob es das Richtige Event ist
MainWindow.cc
MainWindow.hh
Um das zu realisieren musst du selbstständig auf das MouseButtonRelease event deiner TabBar reagieren.
Am einfachsten ist es wen du hierfür einen EventFilter verwendest.
[1] Installiere den EventFilter in deiner TabBar
[2] Prüfe ob das ankommende Event von deiner TabBar ist
[3] Prüfe ob es das Richtige Event ist
MainWindow.cc
Code: Alles auswählen
#include "MainWindow.hh"
MainWindow::MainWindow( QWidget *parent ) :
QMainWindow( parent )
{
QLabel *pL1 = new QLabel( "L1" );
QLabel *pL2 = new QLabel( "L2" );
QLabel *pL3 = new QLabel( "L3" );
QLabel *pL4 = new QLabel( "L4" );
QLabel *pL5 = new QLabel( "L5" );
pTab = new QTabWidget( this );
pTab->setMinimumSize( 300, 300 );
pTab->addTab( pL1, "L11" );
pTab->addTab( pL2, "L22" );
pTab->addTab( pL3, "L33" );
pTab->addTab( pL4, "L44" );
pTab->addTab( pL5, "L55" );
//[1]
pBar = pTab->tabBar();
pBar->installEventFilter( this );
}
bool MainWindow::eventFilter( QObject *obj, QEvent *event )
{
//[2]
if( obj == pBar )
{
//[3]
if( event->type() == QEvent::MouseButtonRelease )
{
qDebug() << pBar->currentIndex();
return true;
}
else
{
return false;
}
}
else
{
// pass the event on to the parent class
return QMainWindow::eventFilter( obj, event );
}
}
Code: Alles auswählen
#ifndef MAINWINDOW_HH
#define MAINWINDOW_HH
#include <QEvent>
#include <QLabel>
#include <QMainWindow>
#include <QObject>
#include <QTabBar>
#include <QTabWidget>
#include <QDebug>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow( QWidget *parent = 0 );
protected:
bool eventFilter( QObject * watched, QEvent * event );
private:
QTabWidget *pTab;
QTabBar *pBar;
};
#endif // MAINWINDOW_HH
Re: QTabWidget: Klick auf aktiven Tab abfangen
Wow, vielen Dank für die Antwort. Habe es so eingebaut und es funktioniert genau, wie ich es wollte.
Viele Grüße
Bastian
Viele Grüße
Bastian
Re: QTabWidget: Klick auf aktiven Tab abfangen
Freut mich
Bitte noch den Titel deines ersten Posting editieren auf "[solved] QTabWidget: Klick auf aktiven Tab abfangen"
Bitte noch den Titel deines ersten Posting editieren auf "[solved] QTabWidget: Klick auf aktiven Tab abfangen"