Qt4 & enter/exit modal functions
Matthias Ettrich
ettrich at trolltech.com
Mon May 23 12:31:50 BST 2005
On Monday 16 May 2005 14:26, Lars Knoll wrote:
> On Sunday 15 May 2005 13:52, Hamish Rodda wrote:
> > Hi,
> >
> > In the course of porting kdelibs to Qt4, we've come across the
> > no-longer-available qt_enter_modal and qt_leave_modal functions, which
> > were internal to qt and accessed via defines in the files which wanted to
> > use them.
> >
> > The functionality seems to have been moved to QApplicationPrivate
> > (enterModal and leaveModal), and the quick & dirty patch to change our
> > code to this is attached. However, this introduces a dependancy on
> > internal headers which is no good if the internal headers ever have a BIC
> > change during KDE4.
> >
> > So, does anyone know a better way to do this? And, is it ok to commit
> > this in the interim, because it holds back quite a bit from
> > compilation...
>
> What about using QEventLoop::processEvents(QEventLoop::ExcludeUserInput)?
> Would that be enough for you?
The KDE code fakes a modal event using private API and then calls
QApplication::enter_loop(). enter_loop() is an obsolete function, it does the
following:
QEventLoop eventLoop;
eventLoop.exec();
Hamish, if you drop the idea of faking a modal widget and simply do
QEventLoop eventLoop;
connect(this, SIGNAL(leaveModality()), &eventLoop, SLOT(quit()));
eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
you should get exactly want you want. Emit the leaveModality() signal when you
are done, and the temporary event loop will terminate.
Matthias
More information about the kde-core-devel
mailing list