00001 #ifndef QUERYTHREADCOMMAND_H 00002 #define QUERYTHREADCOMMAND_H 00003 00004 #include <QQueue> 00005 #include <QSqlQuery> 00006 #include <QObject> 00007 #include <QSharedPointer> 00008 00009 #define QT_SHAREDPOINTER_TRACK_POINTERS 00010 00018 class QueryThreadCommand { 00019 public: 00020 inline QueryThreadCommand() : m_sender(0), m_transmitter(new QObject()) {} 00021 inline QueryThreadCommand(const QObject *sender) : m_sender(sender), m_transmitter(new QObject()) {} 00022 inline QueryThreadCommand(const QObject *sender, const QString &query) : 00023 m_sender(sender), m_transmitter(new QObject()) 00024 { 00025 enqueueQuery(query); 00026 } 00027 inline QueryThreadCommand(const QObject *sender, const QQueue<QString> &queryQueue) : 00028 m_sender(sender), m_transmitter(new QObject()) 00029 { 00030 m_queryQueue.append(queryQueue); 00031 } 00032 inline QueryThreadCommand(const QueryThreadCommand &original) : 00033 m_sender(original.m_sender), m_result(original.m_result), m_transmitter(original.m_transmitter) 00034 { 00035 m_queryQueue = original.m_queryQueue; 00036 } 00037 00038 bool operator==(const QueryThreadCommand &other) const ; 00039 void enqueueQuery(const QString &query); 00040 QString dequeueQuery(); 00041 bool isValid() const; 00042 bool isEmpty() const; 00043 QObject *transmitter(); 00044 00045 void setResult(const QSharedPointer<QSqlQuery> &result); 00046 QSqlQuery *result() const; 00047 const QObject *sender() const; 00048 00049 private: 00050 const QObject *m_sender; 00051 QSharedPointer<QSqlQuery> m_result; 00052 QQueue<QString> m_queryQueue; 00053 QSharedPointer<QObject> m_transmitter; 00054 }; 00055 00056 #endif // QUERYTHREADCOMMAND_H