Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

# An Extension Dialog Example

This example demonstrates how to create an extension dialog.

Essentially all that is necessary is to create a standard dialog and then create a QWidget form to be used as the extension. See the article in Qt Quarterly issue #3.

Project file:

    SOURCES += main.cpp
    FORMS   = mainform.ui \
            dialogform.ui \
            extension.ui
    TEMPLATE        =app
    CONFIG  += qt warn_on release
    DBFILE  = extension.db
    LANGUAGE        = C++
    REQUIRES = full-config nocrosscompiler

Implementation:

    /****************************************************************************
    ** ui.h extension file, included from the uic-generated form implementation.
    **
    ** If you wish to add, delete or rename functions use Qt Designer which will
    ** update this file, preserving your code. Create an init() function in place
    ** of a constructor, and a destroy() function in place of a destructor.
    *****************************************************************************/
    #include "dialogform.h"
    #include "extension.h"
    #include <qapplication.h>
    #include <qcheckbox.h>
    #include <qlineedit.h>

    void MainForm::init()
    {
        sessions = FALSE;
        logging = FALSE;
        log_filename = QString::null;
        log_errors = TRUE;
        log_actions = TRUE;
    }

    void MainForm::optionsDlg()
    {
        DialogForm *dlg = new DialogForm( this, "dialog", TRUE );
        Extension *ext = (Extension*)dlg->extension()->qt_cast( "Extension" );
        if ( !ext )
            return;
        dlg->sessionsCheckBox->setChecked( sessions );
        dlg->loggingCheckBox->setChecked( logging );
        ext->logfileLineEdit->setText( log_filename );
        ext->logErrorsCheckBox->setChecked( log_errors );

        if ( dlg->exec() ) {
            sessions = dlg->sessionsCheckBox->isChecked();
            logging = dlg->loggingCheckBox->isChecked();
            log_filename = ext->logfileLineEdit->text();
            log_errors = ext->logErrorsCheckBox->isChecked();
        }
    }

    void MainForm::quit()
    {
        QApplication::exit( 0 );
    }

    /****************************************************************************
    ** ui.h extension file, included from the uic-generated form implementation.
    **
    ** If you wish to add, delete or rename functions use Qt Designer which will
    ** update this file, preserving your code. Create an init() function in place
    ** of a constructor, and a destroy() function in place of a destructor.
    *****************************************************************************/

    void DialogForm::init()
    {
        extensionShown = FALSE;
        setExtension( new Extension( this ) );
        setOrientation( Vertical );
    }

    void DialogForm::toggleDetails()
    {
        extensionShown = !extensionShown;
        showExtension( extensionShown );
        QString text = tr( "&Details " );
        text += QString( extensionShown ? "<<<" : ">>>" );
        detailsPushButton->setText( text );
    }

    /****************************************************************************
    ** ui.h extension file, included from the uic-generated form implementation.
    **
    ** If you wish to add, delete or rename functions use Qt Designer which will
    ** update this file, preserving your code. Create an init() function in place
    ** of a constructor, and a destroy() function in place of a destructor.
    *****************************************************************************/

Main:

    #include <qapplication.h>
    #include "mainform.h"

    int main( int argc, char ** argv )
    {
        QApplication a( argc, argv );
        MainForm *w = new MainForm;
        w->show();
        a.connect( &a, SIGNAL( lastWindowClosed() ), w, SLOT( quit() ) );
        return a.exec();
    }

See also Step-by-step Examples.