下面程序编译没有错误,运行却未达到想要的效果,最后调试发现,是信号槽绑定后无效,即槽函数没有受到信号的触发。具体代码如下:
main.cpp

#include <QtCore>
#include "controller.h"
#include "mythread.h"int main(int argc,char*argv[])
{QCoreApplication app(argc,argv);Controller controler;controler.startThread();return app.exec();
}

controller.h

#ifndef CONTROLLER_H
#define CONTROLLER_H#include <QObject>
#include <QThread>class mythread;class Controller : public QObject
{Q_OBJECT
public:explicit Controller(QObject *parent = nullptr);void startThread();void stopThread();signals:void threadStopped();void threadStarted();void threadHasStopped();
public slots:void slot_dealThreadStarted();void slot_timeout();//    void slot_threadStopped();//    void slot_threadHasStopped();
private:QThread thread;mythread *workThread;
};#endif // CONTROLLER_H

controller.cpp

#include "controller.h"
#include "mythread.h"
#include <QDebug>
#include <QTimer>Controller::Controller(QObject *parent) : QObject(parent)
{}void Controller::startThread()
{workThread = new mythread;workThread->moveToThread(&thread);connect(&thread,&QThread::finished,workThread,&mythread::deleteLater);connect(this,&Controller::threadStarted,this,&Controller::slot_dealThreadStarted);connect(this,&Controller::threadStopped,workThread,&mythread::slot_threadStopped,Qt::BlockingQueuedConnection);connect(this,&Controller::threadHasStopped,workThread,&mythread::slot_threadHasStopped,Qt::BlockingQueuedConnection);
//    connect(this,&Controller::threadHasStopped,this,&Controller::slot_threadHasStopped);
//    connect(this,&Controller::threadStopped,this,&Controller::slot_threadStopped);thread.start();emit threadStarted();QTimer *timer = new QTimer;connect(timer,&QTimer::timeout,this,&slot_timeout);
//    QTimer timer;
//    connect(&timer,&QTimer::timeout,this,&slot_timeout);timer->start(5000);
}void Controller::stopThread()
{if(thread.isRunning()){thread.quit();thread.wait();emit threadStopped();
//        timer->stop();qDebug()<<"线程被关闭!";return ;}emit threadHasStopped();
}void Controller::slot_dealThreadStarted()
{qDebug()<<tr("线程开始执行");
}void Controller::slot_timeout()
{qDebug()<<tr("5s之后:");stopThread();
}//void Controller::slot_threadStopped()
//{//    qDebug()<<tr("线程退出!");
//}//void Controller::slot_threadHasStopped()
//{//    qDebug()<<tr("线程已经执行完毕!");
//}

myThread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H#include <QObject>class mythread : public QObject
{Q_OBJECT
public:explicit mythread(QObject *parent = nullptr);public slots:void slot_threadStopped();void slot_threadHasStopped();};
#endif // MYTHREAD_H

myThread.cpp

#include "mythread.h"
#include <QDebug>mythread::mythread(QObject *parent) : QObject(parent)
{}void mythread::slot_threadStopped()
{qDebug()<<tr("线程退出!");
}void mythread::slot_threadHasStopped()
{qDebug()<<tr("线程已经执行完毕!");
}

其中信号槽绑定文本中,下面这两个信号槽绑定没有实现想要的效果,似乎是信号槽无效。考虑到槽函数与信号不是在同一个线程中,所以在信号槽绑定无效的情况下,设置了第五个参数,但依旧没有达到效果。

connect(this,&Controller::threadStopped,workThread,&mythread::slot_threadStopped,Qt::BlockingQueuedConnection);
connect(this,&Controller::threadHasStopped,workThread,&mythread::slot_threadHasStopped,Qt::BlockingQueuedConnection);

Qt中绑定信号槽之后,信号槽无效相关推荐

  1. QT中connect、disconnect和信号槽实现原理

    connect connect用于连接信号和槽函数,但是我们经常忽略最后一个参数,本人在写代码时遇到了bug,选择一个符号进行多次标绘,再选择其他符号时,会将上一次选择的符号也进行标绘,主要时conn ...

  2. 在Qt中使用回调函数替代信号槽

    前言 在Qt中传数据,我们使用了一个信号和槽系统,但这并不意味着不能使用旧的经过验证的方法,即使用 CallBack回调函数功能. 事实上使用 CallBack 功能比信号和槽要快一些.并且当发送信号 ...

  3. Qt中父类向子类发送信号

    前言 在mylabel.h与widget.h中均有一个private型的变量isFull 想要在widget当前屏幕状态(是否全屏)改变后同步改变mylabel 思路: C++是面向对象语言.为了类中 ...

  4. qt中c语言函数发送qt信号,关于c ++:从Qt中的静态类方法发送信号

    我正在尝试编写一个静态回调函数,该函数经常从同一类中的另一个静态函数调用. 我的回调函数需要emit一个信号,但是由于某种原因,它根本无法这样做. 我将其放在调试器下,并且slot从不被调用. 但是, ...

  5. Qt中取消信号槽的绑定关系

    Qt中取消对象的信号与槽的关联关系 (1)关于对象取消跟其它任何对象的关联关系 实例: QObject * obj = new QObject; disconnect(obj,0,0,0); 或者 o ...

  6. qt中的qwidget如何实现自定义部件_2.3信号和槽(中)

    2.3.1 在ui中编辑信号槽 这一小节我们来看一下如何在ui中编辑信号槽. 我们想要在ui中实现点击按钮,能够控制进度条的显隐. 新建GUI项目SignalsAndSlots2,类名SignalsA ...

  7. Qt中的信号与槽机制解析

    注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用. 所谓信号槽,简单来说,就像是插销一 ...

  8. 【Qt】Qt中信号与槽

    00. 目录 文章目录 00. 目录 01. 信号与槽 02. 介绍 03. 信号与槽 04. 信号 05. 槽 06. 一个小例子 07. 一个真实的例子 08. 信号和槽使用默认参数 09. 信号 ...

  9. QT中信号和信号槽详解

    如何选择QDialogButtonBox的信号与槽 1.UI中设计了一个QDialogButtonBox,按钮为Cancel和Apply: 2.构造函数连接: connect(ui->butto ...

最新文章

  1. 机器人 陆梅东_机器人知识与实践比赛获奖 - 上海徐汇区青少年活动中心
  2. 数据库分库分表(持续更新中)
  3. Ubuntu16.04 64位系统下安装百度云管家
  4. python处理netcdf_在python中高效读取netcdf变量
  5. oracle数据库swap占用率高,物理内存空余很多,swap被持续占用的问题
  6. 蚂蚁森林快捷指令_iPhone「快捷指令」怎么玩?玩法太多,别让这个功能吃灰
  7. GUI Design Studio 4 5 151 0原型设计工具的使用
  8. 【防守方基础】危险报文识别
  9. iOS开发之各种动画各种页面切面效果
  10. android+程序崩溃,Android平台程序崩溃的类型及原因列举
  11. java中的Timer
  12. 匹配中文字符的正则表达式
  13. 单片机——软件部分开发过程介绍
  14. 怎么在html中加入网上的图片,css中如何插入图片?
  15. 智慧金融管理系统提供个性化的智能客户服务
  16. 数据湖、物联网等--南水北调中线工程的“智慧大脑”,是如何工作的?
  17. GD MCU的SWD和SCLK管脚被当成IO脚占用导致找不到设备
  18. Linux权限管理(week1_day5)--技术流ken
  19. 为什么有些年轻人大学毕业后那么坦然的在家待业?
  20. android 高通分区表,高通msm8994平台的NV到底是储存在哪个分区?

热门文章

  1. 【产品动态】解读Dataphin流批一体的实时研发
  2. 开放下载!基于PAI个性化推荐系统开发指南
  3. 别人家的工程师:阿里巴巴工程师有了新帮手,AI可帮助修Bug
  4. 使用Terraform创建托管版Kubernetes
  5. 杭州云栖大会阿里云放大招,8K远程医疗会诊引关注
  6. Aruba与中国电信国际有限公司达成战略合作 助力中国企业扬帆出海
  7. 学会这10大高性能开发技术,轻松躲过裁员名单!
  8. 众志成城 共克时艰 TigerGraph免费开放企业级版本授权全力支持疫情防控
  9. ​听说,私有云也出新一代了?
  10. Cloud一分钟 | 误删生产数据库血案,顺丰高级工程师被开除;阿里巴巴暂停美国云计算扩张?阿里云总裁正式回应:“不会减少投入”...