QT串口发送问题求助

徐少2020 2020-07-13 10:16:11
serial是串口发送数据的,我在control.C里边正常使用,我想在另一个CPP里边使用serial发送数据,程序报错啊,我把serial的声明写在public里也不行


在controlpage.cpp里无法使用serial发送:
...全文
542 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
徐少2020 2020-07-14
  • 打赏
  • 举报
回复
引用 7 楼 mideum 的回复:
还有你用强制类型强转不是安全的做法。 应该使用

control *ptr = qobject_cast<control*>(parentWidget());
判断ptr != 0才能确保获得的control指针是有效的。否则我都不知道你的parentWidget()到底是不是一个control* 还有你的serial到底是怎么赋值的?你贴出的代码实在太少了,根本没法判断你的错误在哪里
参考这位老师的方法,成功把指针指向control, https://blog.csdn.net/Sakuya__/article/details/105885764 我主界面上有stackedWidget,下面代码把指针指到了stackedWidget或者指向了0 具体哪个记不清了,反正就是指向不对

control *ptr = qobject_cast<control*>(parentWidget());

control *ptr = (control*)parentWidget();  //"parentWidget" very important. 获得父部件指针,同时需要类型强转.
参考这位老师的方法,成功把指针指向control, https://blog.csdn.net/Sakuya__/article/details/105885764 调试输出:control(0x61fdec, name="control") 串口发送成功
徐少2020 2020-07-13
  • 打赏
  • 举报
回复
谢谢支持!control是主窗口,controlpage是子窗口,control.h里已经包含过了, 现在就是子窗口调用父窗口控件的问题了,目前这样写是可以的

control *ptr = (control*)parentWidget();
ptr->writeData();
但这样写不行,程序编译成功,运行就会崩溃

control *ptr = (control*)parentWidget();
ptr->serial->write(0x00);
芒果黑 2020-07-13
  • 打赏
  • 举报
回复
pro文件添加QT += serialport
包含头文件#include <QSerialPort>
mideum 2020-07-13
  • 打赏
  • 举报
回复
还有你用强制类型强转不是安全的做法。
应该使用

control *ptr = qobject_cast<control*>(parentWidget());

判断ptr != 0才能确保获得的control指针是有效的。否则我都不知道你的parentWidget()到底是不是一个control*
还有你的serial到底是怎么赋值的?你贴出的代码实在太少了,根本没法判断你的错误在哪里
mideum 2020-07-13
  • 打赏
  • 举报
回复
引用 5 楼 徐少521 的回复:
这样也崩溃

你自己有debug吗,崩溃在ptr,还是在serial,还是write
徐少2020 2020-07-13
  • 打赏
  • 举报
回复
引用 3 楼 mideum 的回复:
write(0x00)你这是传一个空指针,当然要崩了 你是想传一个值是0的byte吗? 如果你只传一个byte,就用putChar。 如果传多个byte,先转成QByteArray。

    control *ptr = (control*)parentWidget();  //"parentWidget" very important. 获得父部件指针,同时需要类型强转.

    QByteArray A = control::QString2Hex("AA 55");
    qDebug() << A;
    ptr->serial->write(A);

这样也崩溃
mideum 2020-07-13
  • 打赏
  • 举报
回复
还有你确定给serial赋值了吧?
mideum 2020-07-13
  • 打赏
  • 举报
回复
write(0x00)你这是传一个空指针,当然要崩了
你是想传一个值是0的byte吗?
如果你只传一个byte,就用putChar。
如果传多个byte,先转成QByteArray。

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧