QT5 中的信号和插槽
SIGNALS and SLOTS in QT5
我遇到了以下问题:
我有一个 GUI 元素类和一个线程类。我想在他们之间交换信号。但是,它只能在一个方向上工作。我可以成功地将信号从主 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:
...
};
有什么想法吗?拜托,我已经没有想法了。
我相信
,你应该在运行实现中调用exec。Exec启动事件循环,它应该允许发送信号。
看看:
int QThread::exec() [protected] 进入事件循环并等待直到 调用 exit(),返回传递给 exit() 的值。这 如果通过 quit() 调用 exit(),则返回的值为 0。有必要 调用此函数以启动事件处理。
我希望这有所帮助。
解决了!事实证明,只有 GUI 元素才能与线程通信。线程可以从其他类型的线程继承,信号和插槽都没有任何问题。问题在于对象GfxMapItem。由于某种原因,它无法处理正常的通信。
相关文章:
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- C++ 信号和插槽不工作:插槽不响应事件
- QObject::连接无法将信号连接到*this*对象的插槽
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- QT5 信号不会激活插槽内的功能
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- C++Qt信号和插槽
- Qt moveToThread,带有参数的信号/插槽
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 从 QWidgetList 访问 QWidget 子插槽/信号 (QList<QWidget*>)
- 两个对象QT之间的示例插槽/信号
- QT对象::连接:没有此类插槽信号到线程插槽
- Qt QAxWidget - WebBrowser手动设置插槽/信号
- 没有这样的插槽/信号(Qt)