Seite 1 von 1

[solved] QTabWidget: Klick auf aktiven Tab abfangen

Verfasst: 4. Dezember 2013 17:48
von baszim
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

Re: QTabWidget: Klick auf aktiven Tab abfangen

Verfasst: 5. Dezember 2013 09:31
von Hulk2442
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

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 );
	}
}
MainWindow.hh

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

Verfasst: 5. Dezember 2013 11:36
von baszim
Wow, vielen Dank für die Antwort. Habe es so eingebaut und es funktioniert genau, wie ich es wollte.

Viele Grüße
Bastian

Re: QTabWidget: Klick auf aktiven Tab abfangen

Verfasst: 6. Dezember 2013 11:28
von Hulk2442
Freut mich :-)
Bitte noch den Titel deines ersten Posting editieren auf "[solved] QTabWidget: Klick auf aktiven Tab abfangen"