MainWindowのコンストラクターで作成された2つのQObject間でシグナル/スロットを接続するためのベストプラクティスを知りたかったのですが、後で別のスレッドに移動しました...デフォルトの接続が機能していないようですが、オプションで接続すると機能しQt::Directconnection
始めます...しかし、シグナル/スロットが失敗することがあります...以下は私のコードパターンです..クラスの設計を変更する必要がある場合はお知らせください...
MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
{
myObjectA = new ObjectA;
myObjectB = new ObjectB;
connect( myObjectA,SIGNAL(signalA()),myObjectB,SLOT(slotB()) );
myObjectA.initiateProcess();
myObjectB.initiateProcess();
}
ObjectA.h
#include <QThread>
#include <QObject>
class ObjectA : public QObject
{
Q_OBJECT
public:
explicit ObbjectA(QObject *parent = 0);
void inititateProcess();
public slots:
void do_job();
signals:
void signalA();
private:
QThread *worker;
}
ObjectA.cpp
ObjectA::ObjectA(QObject* parent)
{
....
}
void ObjectA::do_jobA()
{
//do something;
}
void ObjectA::initiateProcess()
{
worker = new QThread;
connect(worker,SIGNAL(started()),this,SLOT(do_jobA()));
this->moveTo(worker);
worker->start()
}
ObjectB.h
#include <QThread>
#include <QObject>
class ObjectB : public QObject
{
Q_OBJECT
public:
explicit ObjectB(QObject *parent = 0);
void initiateProcess();
public slots:
void do_job();
void slotB();
signals:
void signalB();//for some other slot
private:
QThread *worker;
}
ObjectB.cpp
ObjectB::ObjectB(QObject* parent)
{
....
}
void ObjectB::do_jobB()
{
//do something;
}
void ObjectB::initiateProcess()
{
worker = new QThread;
connect(worker,SIGNAL(started()),this,SLOT(do_jobB()));
this->moveTo(worker);
worker->start()
}