Go back to Richel Bilderbeek's homepage.

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

 

 

 

 

 

(C++) Qt How to add an Event?

 

How to add an Event? is a QT FAQ, especially for people with a C++ Builder background (like me): in C++ Builder the following steps were done for you automatically.

 

To add an Event (in Qt these are called 'slots'), three steps must be takes:

  1. Declare the Event/slot
  2. Define the Event/slot
  3. Connect a signal with the Event/slot

 

At the bottom of this page, a complete Qt Creator project can be downloaded.

 

 

 

 

Step 1: Declare the Event/slot

 

The Event/slot must be declared in the dialog's header file. In the example below the slot 'MyEvent' is declared. All other code is default-created by Qt Creator.

 

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
  class Dialog;
}

class Dialog : public QDialog
{
  Q_OBJECT

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

protected:
  void changeEvent(QEvent *e);

private:
  Ui::Dialog *ui;

private slots:
  void MyEvent();
};

#endif // DIALOG_H

 

 

 

 

 

Step 2: Define the Event/slot

 

The Event/slot must be defined in the dialog's implementation file. In the example below the slot 'MyEvent' is defined to changed the dialog's title. All other code is default-created by Qt Creator.

 

#include "dialog.h"
#include "ui_dialog.h"

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

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

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

void Dialog::MyEvent()
{
  this->setWindowTitle("MyEvent");
}

 

 

 

 

 

Step 3: Connect a signal with the Event/slot

 

Now that the Event/slot is declared, it must be specified what triggers its call. In Qt, Event/slots are triggered by a signal. In the example below the slot 'MyEvent' is set to be triggered (that is: connected) to the signal 'accepted()'. Note that this is a nearly-useless trigger: better would be something like a QPushButton's clicked() signal.

 

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QObject::connect(this,SIGNAL(accepted()),this,SLOT(MyEvent()));
}

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

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

void Dialog::MyEvent()
{
  this->setWindowTitle("MyEvent");
}

 

 

 

 

 

About this example

 

Operating system: Ubuntu

IDE: Qt Creator 2.0.0

Project type: Qt4 GUI Application

Compiler: G++ 4.4.1

Libraries used:

 

 

 

 

 

 

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

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict