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