Qt5下串口编程中“QIODevice::write (QSerialPort): device not open”问题的分析处理总结

2023-11-15

一、实现功能说明:

在主窗口中先配置好串口并“打开串口”,在菜单中点击“测量”子窗口,进入子窗口画面,点击子窗口的“测量”按钮,实现读取传感器指令的数据发送。

二、程序说明:

主窗口:1、MainWidget.h:定义类MainWidget,构造函数Mainwidget,公有变量 Qserialport serial,公有函数 void  serial_write(const char *buf);

              2、MainWidget.cpp中,有serial_init(),serial_open(),serial_close(),serial_write(),serial_readyread()等串口相关函数的程序,以及打开子画面的槽函数ShowMeasureWindow()和measureAction

子窗口:1、Measure.h:定义类Measure,构造函数Measure,按钮QPushButton *measureBtn以及d对应的槽函数virtual void measureread();

              2、Measure.cpp:画面布局,构造函数内添加:connect(measureBtn,SIGNAL(clicked()),this,SLOT(measureread()));

void measureread()内调用Mainwidget下的serial_write(const char *buf)函数

详细的measureread()如下:

void Measure::measureread()
{  
        char Data_1[8]={0x01,0x03,0x00,0x0F,0x00,0x1C,0x75,0x09};
        char *buf=Data_1;
        MainWidget mainwidget;
        mainwidget.serial_write(buf);
}

三、问题及分析:

编译没问题,但是点击"测量"按钮,数据没有发送成功,应用程序输出:

QIODevice::write (QSerialPort): device not open

error code = QSerialPort::SerialPortError(DeviceNotFoundError)

error string = "No such file or directory"

通过进一步分析,通过增加调试程序:

    //serial_init()下增加程序
    qDebug() << "portName() = " << info.portName();
    qDebug() << "serial description = " << info.description();

    //serial_open()下增加程序
    qDebug() << "read portName() = " << showWidget->portBox->currentText();
    qDebug() << "serial rateBox = " << showWidget->rateBox->currentText().toInt();
    qDebug() << "serial dataBox= " << showWidget->dataBox->currentIndex();
    qDebug() << "serial checkBox= " <<showWidget->checkBox->currentIndex();
    qDebug() << "serial stopBox= " <<showWidget->stopBox->currentIndex();

    qDebug() << "isopen = " << serial.isOpen();
     //seral_write()函数下增加程序
    qDebug() << "isopen state = " << serial.isOpen(); //measureread()函数中调用

程序运行时输出窗口有:

portName() = "COM1"

serial description = "Virtual Serial Port (Eltima Softwate)"

read portName() = "COM1"

serial rateBox = 9600

serial dataBox= 3

serial checkBox= 0

serial stopBox= 0

isopen = true

isopen state = false

打开测量子画面时,isopen = true,但是当点击“测量”按钮时,isopen state = false. 说明measureread()函数中虽然实现了对serial_write()的调用,但是此时串口的确关闭了,正如QIODevice::write (QSerialPort): device not open所提示的。

说明measureread()中对serial_write()的调用有问题。

四、问题解决:

研究measureread()中的程序,发现是主窗口对子窗口内函数的调用方法,而不是子窗口对主窗口的调用方法,因此,重新修改程序如下(最后两句):

void Measure::measureread()
{  
        char Data_1[8]={0x01,0x03,0x00,0x0F,0x00,0x1C,0x75,0x09};
        char *buf=Data_1;

        MainWidget *ptr =(MainWidget*)parentWidget();
        ptr->serial_write(buf);

}

程序修改后,编译运行,能正常实现数据的发送。

五、总结

1、主窗口程序中调用子窗口函数sub():

    ClassSub  *classsub;  //子窗口的ClassSub

    classsub=new ClassA(this);

    classsub>sub();

或者:ClassA aaaa;

aaaa.sub();

2、主窗口程序中调用子窗口控件btn:

ClassSub  *classsub;

classsub->btn->setEnabled(false);

3、子窗口程序中调用主窗口函数read():

ClassMain  *ptr=(ClassMain*)parentWidget();

ptr->read();

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt5下串口编程中“QIODevice::write (QSerialPort): device not open”问题的分析处理总结 的相关文章

  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 C# 读取 Soap 消息

  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • Python 分割技术提取图像和视频中对象

    计算机视觉是计算机查看和识别对象的媒介 计算机视觉的目标是使计算机能够分析图像和视频中的对象 解决不同的视觉问题 对象分割为方便分析图像和视频中的对象铺平了道路 对不同领域做出了巨大贡献 例如医学 自动驾驶汽车的视觉以及图像和视频的背景编辑
  • vue form 滑动验证码、手机短信验证

    话不多说直接上效果图 vue 注册首页 校验 滑动验证 页面源码
  • mysql explain执行计划

    mysql explain执行计划 mysql gt EXPLAIN SELECT FROM t item i LEFT JOIN t sku s ON i item id s item id LEFT JOIN t sku stock t
  • 楠姐技术漫话:接着唠唠社区发现

    halo 大家好 很开心又和大家见面了 在第一篇技术漫话 图计算的那些事 发布之后 楠姐收到了很多鼓励和支持 非常感谢大家的喜欢 所以楠姐尽自己所能马不停蹄开始第二篇的创作 虽迟但到 也尝试在第二期中 在可读性和观感上尽量做些优化和进步 本
  • Managing Big Data with MySQL学习笔记

    Managing Big Data with MySQL学习笔记 Intro Week 1 How Relational Databases Help Solve Those Problems Database Design Tools E
  • Vue 高德地图实现添加标记,AMap.PlaceSearch 地点搜索,根据页面主题修改地图样式

    Vue 高德地图实现添加标记 AMap PlaceSearch 地点搜索 根据页面主题修改地图样式 效果图 成为开发者并创建key 详细请查阅官方文档 https developer amap com api jsapi v2 guide
  • 分布式锁实现方案3、基于Redis的SET操作实现的分布式锁

    在我的上一篇文章中 关于redis分布式锁的写法 释放锁还有些缺陷 细节见评论部分 本文进一步做了完善 分布式锁实现方案2 基于Redis的SET操作实现的分布式锁 package com alioo common lock import
  • 【leetcode.283】——移动零

    题目 注意 解析 思路 定义left和right指针 都初始化在数组的第一个位置 right指针一直向右走 如果right走到指向的值不为0时 那么right指针指向的值与left指针指向的值进行交换 然后left指针再向后走一步 如此循环
  • c++十大排序——快速排序

    算法基本知识铺垫 有些人可能不知道什么是稳定排序 原地排序 时间复杂度 空间复杂度 我这里先简单解释一下 1 稳定排序 如果 a 原本在 b 的前面 且 a b 排序之后 a 仍然在 b 的前面 则为稳定排序 2 非稳定排序 如果 a 原本
  • nodejs高大上的部署方式-PM2

    如果直接通过node app来启动 如果报错了可能直接停在整个运行 supervisor感觉只是拿来用作开发环境的 再网上找到pm2 目前似乎最常见的线上部署nodejs项目的有forever pm2这两种 使用场合 supervisor是
  • 旋转链表——快慢指针法的实践

    一 题目 给你一个链表的头节点 head 旋转链表 将链表每个节点向右移动 k 个位置 示例1 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL k 2 输出 4 gt 5 gt 1 gt 2 gt 3 gt NULL 解释
  • matlab灵敏度分析操作,灵敏度分析 使用MATLAB编写.doc

    灵敏度分析 使用MATLAB编写 实验二 线性规划的灵敏度分析 实验目的 1 线性规划求解的单纯形法的灵敏度分析的编程实现 2 掌握使用matlab Lingo Excel的规划求解功能求解 并利用 敏感性报告 进行分析 二 实验内容 课本
  • wazuh中的规则编写以及日志分析

    目录 什么是wazuh 如何搭建wazuh 实验环境 wazuh的规则 配置代理 wazuh中的配置了解 ssh的暴力破解 用户自定义规则 SQL注入的检测 什么是wazuh Wazuh是一个免费 开源和企业级的安全监控解决方案 用于威胁检
  • 【2223sW2】LOG2

    写在前面 好好学习 走出宿舍 走向毕设 一些心路历程记录 很少有代码出现 因为鬼知道哪条代码到时候变成毕设的一部分了咧 还是不要给自己的查重挖坑罢了 23 3 2 检验FFT 早上师兄帮忙看了一眼我画的丑图 说样子应该是对的 增加了检查的精
  • D3DXMESHOPT_ATTRSORT

    Mesh的顶点和索引能够被重组以便能更有效的渲染mesh 当我们这样做时 我们说我们优化了一个mesh 我们可以使用下面的方法来进行优化 HRESULT ID3DXMesh OptimizeInplace DWORD Flags CONST
  • DbVisualizer数据库管理工具

    一款数据库管理工具 推荐使用 安装包及破解方法见盘附件 百度云盘 http pan baidu com share link shareid 253466598 uk 1629211176
  • 【Unity3D日常开发】Unity3D中比较string字符串的常用方法

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好 我是佛系工程师 恬静的小魔龙 不定时更新Unity开发技巧 觉得有用记得一键三连哦 一 前言 字符串string的比较有很多方法 比如 E
  • vlc实现PC与树莓派的视频流传输

    目录 一 使用vlc实现PC与树莓派之间的视频流传输 一 Windows 二 树莓派 二 树莓派与Windows系统之间的聊天 三 非堵塞方式传输图像 视频文件 一 使用vlc实现PC与树莓派之间的视频流传输 一 Windows 安装下载v
  • opencv双目视觉标定,激光结构光提取,指定特征点获取世界坐标

    双目视觉标定 激光结构光提取 指定特征点获取世界坐标 标定方面 校正 结构光提取 二维点转换为三维点 总结 这学期在做双目视觉方面的事情 因为没人带 自己一个人踩了很多坑 因此在这写一点自己的总结心得 标定方面 首先标定主要就是为了确定左右
  • Qt5下串口编程中“QIODevice::write (QSerialPort): device not open”问题的分析处理总结

    一 实现功能说明 在主窗口中先配置好串口并 打开串口 在菜单中点击 测量 子窗口 进入子窗口画面 点击子窗口的 测量 按钮 实现读取传感器指令的数据发送 二 程序说明 主窗口 1 MainWidget h 定义类MainWidget 构造函