KTabWidget / KTabBar

Jason Keirstead jason at keirstead.org
Wed Feb 19 19:48:29 GMT 2003


Hey guys. Over at Kopete we sought to add a right click menu to our QTabWidget,
so I had a look at your guys code, implemented it, and all is well. However,
in the interests of code reuse, I was wondering if we could add a KTabWidget
to KDELIBS that emits a contextMenu( QPoint &, QWidget* ) event when a context menu
event occured on a given tab?

Here is some example code for how this would be done:

KTabWidget::KTabWidget( QWidget *parent ) : QTabWidget( parent )
{
	setTabBar( static_cast<QTabBar*>( new KTabBar( this ) ) );
}

bool KTabWidget::eventFilter( QObject *watched, QEvent *e )
{
	if( e->type() == QEvent::ContextMenu )
	{
		QContextMenuEvent *event = (QContextMenuEvent*) e;
		KTabBar *tBar = static_cast<KTabBar*>( watched );

		QTab *tab = tBar->selectTab( event->pos() );
		if( tab )
		{
			QWidget *targetTab = m_tabBar->page( tBar->indexOf( tab->identifier() ) );
			emit( contextMenu( event->pos(), targetTab ) );
		}
	}

	return false;
}

KTabBar::KTabBar( KopeteTabWidget *parent ) : QTabBar( parent )
{
	installEventFilter( parent->window() );
}

Then, both Kopete and Konq could simply bind to this signal, instead of subclassing
QTabWidget ourselves and relying on event filters / mouseButtonPressed

Comments?

-- 
Jason Keirstead, BCS
http://www.keirstead.org




More information about the kfm-devel mailing list