次の問題が発生しました。
GUI要素クラスとThreadクラスがあります。それらの間で信号を交換したいと思います。ただし、一方向にしか機能しません。メイン GUI ウィンドウからスレッドにシグナルを正常に送信できます。ただし、スレッドからスレッドを呼び出すプロセスにシグナルを送信したいのですが、機能しません。これが私がそれを行う方法です:
bool GfxMapItem::mapSwitch(int seqidx)
{
...
importMapThread_ = new ImportMapThread(sequence_->item(seqidx));
connect(GUI_UI->analExportButton, SIGNAL(clicked()), importMapThread_, SLOT(interrupt1()), Qt::QueuedConnection); //<-- this one works perfectly
connect(importMapThread_, SIGNAL(progress(int)), this, SLOT(loadMap(int)), , Qt::QueuedConnection); // <-- this one unfortunatelly doesn't
...
}
スレッド コードは非常に単純で、シグナルを発するだけです (スレッドをそれ自体に接続したときに機能することを確認しました)。
void ImportMapThread::run()
{
QLOGX("Running ImportMapThread...");
QLOGINC;
emit this->progress(100);
QLOGX("Stopping ImportMapThread...");
}
スレッド ヘッダーは次のようになります。
class ImportMapThread : public InterruptibleThread
{
Q_OBJECT
private:
...
protected:
...
public:
ImportMapThread(SeqItem *p);
signals:
void progress(int value);
void progressReset(int value);
public slots:
virtual void interrupt1();
void loadMap();
protected:
virtual void run();
};
そのスレッドを呼び出すクラスは次のようになります。
class GfxMapItem : public QObject, public QGraphicsPixmapItem
{
Q_OBJECT
...
signals:
void mouseOutside();
void mouseMove(const QPointF &pos);
private slots:
void loadMap(int);
protected:
...
};
何か案は?お願いします、アイデアが尽きてしまいました。