Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) Qt How to show a dialog modally? or How to show a pop-up window?

 

How to show a dialog modally? is a QT FAQ one has to know the answer of for pop-up windows.

 

The answer is to call the 'exec' method of the dialog, as in the method below:

 

void DialogMain::onClickShow()
{
  boost::shared_ptr<DialogPopUp> f(new DialogPopUp);
  f->exec(); //Show the pop-up modally
}

 

For a full working example, you can:

 

 

 

 

 

Project and source code

 

Operating system: Ubuntu 10.04 LTS Lucid Lynx

IDE: Qt Creator 2.0.0

Project type: Qt4 GUI Application

Compiler: G++ 4.4.1

Libraries used:

 

 

 

 

 

main.cpp

 

#include <QtGui/QApplication>
#include "dialogmain.h"

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  DialogMain w;
  w.show();
  return a.exec();
}

 

 

 

 

 

dialogpopup.h

 

#ifndef DIALOGPOPUP_H
#define DIALOGPOPUP_H

#include <QDialog>

namespace Ui {
    class DialogPopUp;
}

class DialogPopUp : public QDialog
{
    Q_OBJECT

public:
    explicit DialogPopUp(QWidget *parent = 0);
    ~DialogPopUp();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::DialogPopUp *ui;
};

#endif // DIALOGPOPUP_H

 

 

 

 

 

dialogpopup.cpp

 

#include "dialogpopup.h"
#include "ui_dialogpopup.h"

DialogPopUp::DialogPopUp(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogPopUp)
{
    ui->setupUi(this);
}

DialogPopUp::~DialogPopUp()
{
    delete ui;
}

void DialogPopUp::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

 

 

 

 

 

dialogmain.h

 

#ifndef DIALOGMAIN_H
#define DIALOGMAIN_H

#include <QDialog>

namespace Ui {
    class DialogMain;
}

class DialogMain : public QDialog
{
    Q_OBJECT

public:
    explicit DialogMain(QWidget *parent = 0);
    ~DialogMain();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::DialogMain *ui;
private slots:
    void onClickShow();
};

#endif // DIALOGMAIN_H

 

 

 

 

 

dialogmain.cpp

 

#include <boost/shared_ptr.hpp>
#include "dialogpopup.h"
#include "dialogmain.h"
#include "ui_dialogmain.h"

DialogMain::DialogMain(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogMain)
{
  ui->setupUi(this);
  QObject::connect(ui->button_show,SIGNAL(clicked()),this,SLOT(onClickShow()));
}

DialogMain::~DialogMain()
{
  delete ui;
}

void DialogMain::changeEvent(QEvent *e)
{
  QDialog::changeEvent(e);
  switch (e->type()) {
  case QEvent::LanguageChange:
    ui->retranslateUi(this);
    break;
  default:
    break;
  }
}

void DialogMain::onClickShow()
{
  boost::shared_ptr<DialogPopUp> f(new DialogPopUp);
  this->hide(); //Hide the main window
  f->exec(); //Show the pop-up modally
  this->show(); //Show the main window again
}

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict