[solved] QTabWidget: Klick auf aktiven Tab abfangen

Verschiedenes zu Qt
Antworten
baszim
Beiträge: 2
Registriert: 4. Dezember 2013 17:43

[solved] QTabWidget: Klick auf aktiven Tab abfangen

Beitrag 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
Zuletzt geändert von baszim am 6. Dezember 2013 12:19, insgesamt 1-mal geändert.
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: QTabWidget: Klick auf aktiven Tab abfangen

Beitrag 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
baszim
Beiträge: 2
Registriert: 4. Dezember 2013 17:43

Re: QTabWidget: Klick auf aktiven Tab abfangen

Beitrag 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
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: QTabWidget: Klick auf aktiven Tab abfangen

Beitrag von Hulk2442 »

Freut mich :-)
Bitte noch den Titel deines ersten Posting editieren auf "[solved] QTabWidget: Klick auf aktiven Tab abfangen"
Antworten