调试QT插槽未调用
Debug Qt slots not called
我浪费了几个小时来识别此错误,但是我仍然不知道为什么会发生...所以我求助于您!
我有一个对象移动到完成一些工作的线程,完成的发射信号被QMainWindow
捕获。尽管很简单,但我窗口中的插槽不运行。但是,如果我将相同的信号连接到qApp
,则可以使用:
connect(objInThread_, SIGNAL(mySignal()), this, SLOT(about())); // Nothing happens
connect(objInThread_, SIGNAL(mySignal()), qApp, SLOT(aboutQt())); // Joy!
请注意,我实际上已复制并粘贴了此螺纹对象的代码从另一个基于 QThread
的对象,因为我有很多,每个插槽都被称为...这个一个。
我该怎么做才能调试?
这是重要插槽的声明:
class mainwin : public QMainWindow
{
Q_OBJECT
public:
mainwin(QWidget *parent = 0, Qt::WindowFlags flags = 0);
void setupThread()
{
// Thread
objThread_ = new QThread(this);
objThread_->start();
// Object in thread
objInThread_ = new myObject();
objInThread_->moveToThread(objThread_);
// Connect
connect(objInThread_, SIGNAL(mySignal()), this, SLOT(about()));
}
// ...
public slots:
void loadSettings();
void about();
// ...
}
和 about
插槽简单如下:
void mainwin::about()
{
qWarning("ABOUT");
}
螺纹对象函数如下:
void myObject::fire()
{
qWarning("this is threaded");
emit mySignal();
}
您确定,应执行插槽函数的线程的事件环正在运行吗?为了处理插槽函数,相应的EventLoop必须通过Exec(...)运行( - 至少我认为它称为Exec)函数。
更多的澄清:每个Q_Object属于线程。这可以通过movetothread()函数更改。相应的线程的事件循环必须运行才能处理插槽函数。
编辑:我的猜测是您的线程(您创建的内容)没有Eventloop执行。
您确定mainwin的标头文件已添加到.pro文件的标题吗?
HEADERS += "Header file of mainwin declaration"
相关文章:
- QT 插槽未在主线程上调用
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- Qt插槽调用了两次
- 从插槽调用 QApplication::p rocessEvents 会导致再次调用同一插槽
- 如何使用 signals.boostv2 调用特定插槽
- 通过 id 访问 QML 插槽中的嵌套对象(从 c++ 调用)
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 插槽调用了两次qt
- QListView 的插槽::d ouble点击未被调用
- 类继承自QLabel,为什么不调用自定义插槽?
- 为什么插槽函数即使成功调用也无法插入文本
- 有没有办法调试排队等待对象的Qt插槽调用
- 当对话框中的任何小部件发出信号时,是否可以调用插槽
- 这是在Qt信号和插槽中使用参数调用函数的好方法吗?
- 为什么即使在使用 Qt::D irectConnection 之后,接收器的线程中仍会调用插槽?如何确保在另一个线程中调用它?
- Qt connect(*发送器,*信号,*接收器,*方法)不调用插槽
- 通过直接连接或排队连接调用插槽的QTimer超时插槽之间的区别
- 尽管连接成功,但未调用插槽
- 是否可以在同一线程中并行调用插槽
- 如何在没有连接的情况下调用插槽