diff -r a45d1cac365e -r c84042d014c9 src/QtRelationalReaderStringHadler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/QtRelationalReaderStringHadler.h Sat Sep 29 00:43:16 2018 +0200 @@ -0,0 +1,70 @@ +#pragma once + +#include + +#include +#include +#include +#include + +using namespace relpipe::reader; +using namespace relpipe::reader::handlers; + +// signal/slot parameters must be declared here and registered with qRegisterMetaType() + +Q_DECLARE_METATYPE(string_t) +Q_DECLARE_METATYPE(std::vector) + +class QtRelationalReaderStringHadler : public QObject, public RelationalReaderStringHadler { + Q_OBJECT +private: + RelationalReaderStringHadler* target; +public: + + QtRelationalReaderStringHadler(QObject* parent, RelationalReaderStringHadler* target) : + QObject(parent), target(target) { + + // see Q_DECLARE_METATYPE above + qRegisterMetaType(); + qRegisterMetaType> (); + + QObject::connect(this, &QtRelationalReaderStringHadler::signal_startRelation, this, &QtRelationalReaderStringHadler::slot_startRelation); + QObject::connect(this, &QtRelationalReaderStringHadler::signal_attribute, this, &QtRelationalReaderStringHadler::slot_attribute); + QObject::connect(this, &QtRelationalReaderStringHadler::signal_endOfPipe, this, &QtRelationalReaderStringHadler::slot_endOfPipe); + } + + virtual ~QtRelationalReaderStringHadler() { + + } + + virtual void startRelation(string_t name, std::vector attributes) override { + emit signal_startRelation(name, attributes); + } + + virtual void attribute(const string_t& value) override { + emit signal_attribute(value); + }; + + virtual void endOfPipe() override { + emit signal_endOfPipe(); + }; + +signals: + void signal_startRelation(string_t name, std::vector attributes); + void signal_attribute(const string_t& value); + void signal_endOfPipe(); + +private slots: + + void slot_startRelation(string_t name, std::vector attributes) { + target->startRelation(name, attributes); + }; + + void slot_attribute(const string_t& value) { + target->attribute(value); + }; + + void slot_endOfPipe() { + target->endOfPipe(); + }; +};