[Qt-interest] Quit vs. Close window

Bill KING bill.king at trolltech.com
Tue Dec 30 04:30:51 CET 2008


This chunk of code from QWidgetPrivate::close_helper() may help a bit,
it's the determinant code for weither lastWindowClosed() signal is
emitted, and may be reworked inside your code to determine whether to do
close or quit behaviour.

    // Attempt to close the application only if this widget has the
    // WA_QuitOnClose flag set set and has a non-visible parent
    quitOnClose = quitOnClose && (parentWidget.isNull() ||
!parentWidget->isVisible() ||
parentWidget->testAttribute(Qt::WA_DontShowOnScreen));

    if (quitOnClose) {
        // If there is no non-withdrawn primary window left (except
        // the ones without QuitOnClose or with WA_DontShowOnScreen),
        // we emit the lastWindowClosed signal
        QWidgetList list = QApplication::topLevelWidgets();
        bool lastWindowClosed = true;
        for (int i = 0; i < list.size(); ++i) {
            QWidget *w = list.at(i);
            if ((w->isVisible() &&
!w->testAttribute(Qt::WA_DontShowOnScreen))
                    && !w->parentWidget() &&
w->testAttribute(Qt::WA_QuitOnClose)) {
                lastWindowClosed = false;
                break;
            }
        }
        if (lastWindowClosed)
            QApplicationPrivate::emitLastWindowClosed();
    }



Israel Brewster wrote:
> How can I handle a close window command (such as when the user clicks  
> the close button) differently than a quit (or exit, if you prefer)  
> command? I have made a custom implementation of the closeEvent()  
> function to do some stuff when the user closes the window, and this  
> works. However, this is also called when you choose to quit the  
> application, which I don't want to happen- I only want the function to  
> run when the user manually closes the window. How can I implement  
> this? is there some sort of flag I can look for that lets me know the  
> application is closing? Or a specific signal that is emitted when the  
> close button is pressed that is not emitted when the application  
> exits? Thanks.
>
> -----------------------------------------------
> Israel Brewster
> Computer Support Technician
> Frontier Flying Service Inc.
> 5245 Airport Industrial Rd
> Fairbanks, AK 99709
> (907) 450-7250 x293
> -----------------------------------------------
>
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
>   


-- 
Bill King, Software Engineer
Qt Software, Nokia Pty Ltd
Brisbane Office




More information about the Qt-interest-old mailing list