Qt를 아래처럼 시그널과 슬롯을 이용해 “Hello, World!”를 아주 객체지향적(?)으로 출력할 수 있다. 그냥 “Hello, World!”를 출력하는 것보다는 한참 복잡하지만, Qt의 시그널, 슬롯 매커니즘이 잘 노출되어 있으므로 Qt 시작에 있어 개념을 잘 보여주는 예제라고도 볼 수 있다.
#include <QCoreApplication> #include <QTimer> #include "signal_emitter.h" int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // emitter is now a child of core application app. // app will delete emitter. signal_emitter *emitter = new signal_emitter(&app); // when emitter emits 'finished' signal, app will be terminated. QObject::connect(emitter, SIGNAL(finished()), &app, SLOT(quit())); // we emit initial 'launch()'. QTimer::singleShot(0, emitter, SLOT(launch())); return app.exec(); }
실제로 작업을 담당하는 signal_emitter 클래스는 다음과 같이 정의하였다.
#ifndef SIGNAL_EMITTER_H #define SIGNAL_EMITTER_H #include <QObject> class signal_emitter : public QObject { Q_OBJECT public: explicit signal_emitter(QObject *parent = 0); signals: void finished(); // DO NOT implement, or will cause link error. public slots: void launch(); // Fired by QTimer::singleShot() }; #endif // SIGNAL_EMITTER_H
#include "signal_emitter.h" #include <iostream> signal_emitter::signal_emitter(QObject *parent) : QObject(parent) { } void signal_emitter::launch() { std::cout << "Hello, world!\n"; emit finished(); }
소스 코드는 여기서 다운로드 가능하다. 시그널과 슬롯에 대해서는 SignalsAndSlots에서 보다 자세히 다룰 것이다.