[Qt] QTabWidget problem

zeljko zeljko at holobit.net
Wed Jan 28 08:42:46 CET 2009


Hi all,

After latest patches about focuspolicy (I've completely removed handling of 
tab & backtab from qt, now LCL controls that part), we have pending problem 
with QTabWidget. QTabWidget::keyPressEvent(QKeyEvent *e) drive us into 
problem since it handles Tab key before that event is passed to LCL, and sets 
focus to tabbar.Original code is here (shorten)
void QTabWidget::keyPressEvent(QKeyEvent *e)
{
    Q_D(QTabWidget);
    if (((e->key() == Qt::Key_Tab || e->key() == Qt::Key_Backtab) &&
          count() > 1 && e->modifiers() & Qt::ControlModifier)
                page = 0;
            }
            if (d->tabs->isTabEnabled(page)) {
                setCurrentIndex(page);
                break;
            }
.... blablablbalbla

        }
        if (!qApp->focusWidget())  <--------- THIS IS PROBLEM
            d->tabs->setFocus();   <--------- THIS IS PROBLEM
    } else {
        e->ignore();
    }
}


So, QT always handles tab key at this place, and if qApp->focusWidget() 
returns NULL our focus is jailed into tabbar, and we must use mouse to get 
out of tabbar. That's because we set QtClickFocus on all widgets with 
TabStop=TRUE, and tabbar searches for widget with QtStrongFocus or 
QtTabFocus.

So, in short - we have two solutions:

1.QLCLTabWidget which overrides keyPressEvent().
2.Write completely new TQtTabWidget from stratch.

Den ?

zeljko





More information about the Qt mailing list