Go back to Richel Bilderbeek's homepage.

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

 

 

 

 

 

(C++) Boost signal example 1: comparing Boost and Qt

 

This Boost signal example shows both the use of Boost signals and Qt signals.

 

The article From Qt signal to Boost signal describes why and how to move from using Qt signals to using Boost signals.

 

 

 

 

 

 

Technical facts

 

Application type(s)

Operating system(s) or programming environment(s)

IDE(s):

Project type:

Compiler(s):

Libraries used:

 

 

 

 

 

Qt project file: CppSignal.pro

 

#-------------------------------------------------
#
# Project created by QtCreator 2010-12-29T13:23:42
#
#-------------------------------------------------
QT       += core
QT       -= gui
TARGET = CppSignal
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
    emitter.cpp \
    receiver.cpp
HEADERS += \
    emitter.h \
    receiver.h

 

 

 

 

 

emitter.cpp

 

#include <iostream>
#include "emitter.h"

QtEmitter::QtEmitter(QObject *parent) :
    QObject(parent)
{
}

void QtEmitter::DoEmit()
{
  std::clog << "QtEmitter: emitting signal\n";
  emit signal_emit();
}

void Emitter::DoEmit()
{
  m_signal();
  std::clog << "Emitter: emitting signal\n";
}

 

 

 

 

 

emitter.h

 

#ifndef EMITTER_H
#define EMITTER_H

#include <QObject>

class QtEmitter : public QObject
{
  Q_OBJECT
public:
  explicit QtEmitter(QObject *parent = 0);
  void DoEmit();

signals:
  void signal_emit();
};

#include <boost/signals2.hpp>

struct Emitter
{
  boost::signals2::signal<void ()> m_signal;
  void DoEmit();
};

#endif // EMITTER_H

 

 

 

 

 

main.cpp

 

#include <boost/signals2.hpp>

#include "emitter.h"
#include "receiver.h"

int main()
{
  {
    //The Qt way
    QtEmitter e;
    QtReceiver r;
    QObject::connect(&e,SIGNAL(signal_emit()),&r,SLOT(OnReceive()));
    e.DoEmit();
  }
  {
    //The Boost way
    Emitter e;
    Receiver r;
    e.m_signal.connect(
      boost::bind(
        &Receiver::OnReceive,
        r));
    e.DoEmit();
  }
}

 

 

 

 

 

receiver.cpp

 

#include <iostream>
#include "receiver.h"

QtReceiver::QtReceiver(QObject *parent) :
    QObject(parent)
{

}

void QtReceiver::OnReceive()
{
  std::clog << "QtReceiver: received signal\n";
}

void Receiver::OnReceive()
{
  std::clog << "Receiver: received signal\n";
}

 

 

 

 

 

receiver.h

 

#ifndef RECEIVER_H
#define RECEIVER_H

#include <QObject>

class QtReceiver : public QObject
{
  Q_OBJECT
public:
  explicit QtReceiver(QObject *parent = 0);

signals:

public slots:
  void OnReceive();
};

#include <boost/signals2.hpp>

struct Receiver
{
  void OnReceive();
};
#endif // RECEIVER_H

 

 

 

 

 

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

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict