找回密码
 立即注册
收起左侧

Qt中对象的创建和方法属性使用上的困惑

3
回复
5854
查看
[复制链接]
累计签到:15 天
连续签到:1 天
来源: 2018-3-17 17:02:57 显示全部楼层 |阅读模式
5Qter豆
本帖最后由 memorysevencat 于 2018-3-18 16:03 编辑

为什么 我在
  1. <div>void MainWindow::on_pushButton_clicked()
  2. {
  3.     QSerialPort m_serial;
  4.     m_serial.setPortName("COM1");
  5.     m_serial.open(QIODevice::ReadWrite);</div><div>}</div>
复制代码
这样写,在调试助手中,看不到串口是打开的状态。
而在qt的demo中MasterThread m_thread;却能正常打开串口。
QSerialPort是不是一定要在线程中?
///
上面是我刚开始提的问题,我本来以为是不是点击事件结束后,QSerialPort 的引用也自动结束掉了?
所以只能在别的线程中使用?
我有用工具测试了下,发现,在click中串口没有收到任何数据。
所以我就放弃了这个想法,而从整个实现的代码中去找问题,
发下如下帖!~

最佳答案

查看完整内容

你的这几个问题,实际上是C++的基础要学习的东西,建议最好还是补充一下基础! 1、带*的叫指针变量,通常new运算符得到;不带的,一般是临时变量(成员和全局变量的生命周期长点而已); 2、带*的操作通过->来实现,不带*的通过.来实现; 3、看看C++ Primer,但不需要全看玩(太多、复杂),看看基础章节,特别是语法和基础结构! ...
回复

使用道具 举报

累计签到:25 天
连续签到:1 天
2018-3-17 17:02:58 显示全部楼层
memorysevencat 发表于 2018-3-18 15:55
QSerialPort 对象声明放在 mainwindow.h、方法体还有带不带*号,使用起来 差别好大啊。
我尝试 ...

你的这几个问题,实际上是C++的基础要学习的东西,建议最好还是补充一下基础!
1、带*的叫指针变量,通常new运算符得到;不带的,一般是临时变量(成员和全局变量的生命周期长点而已);
2、带*的操作通过->来实现,不带*的通过.来实现;
3、看看C++ Primer,但不需要全看玩(太多、复杂),看看基础章节,特别是语法和基础结构!
参与人数 1人气 +2 收起 理由
memorysevencat + 2 对我帮助很大!

查看全部评分总评分 : 人气 +2

回复

使用道具 举报

累计签到:15 天
连续签到:1 天
2018-3-18 15:55:43 显示全部楼层
本帖最后由 memorysevencat 于 2018-3-18 16:02 编辑

QSerialPort 对象声明放在 mainwindow.h、方法体还有带不带*号,使用起来 差别好大啊。
我尝试用3种方式去修改了下上述代码,

1.将 QSerialPort serial;放到mainwindow.h  但是这种方式打开第一个串口之后,再打开别的串口全部失败;

2.QSerialPort *serial;放到mainwindow.h 相应改动serial=new QSerialPort();然后再操作,可以成功打开多个串口,要用 serial->

3.在click事件中 QSerialPort *serial=new QSerialPort();这样就可以,要用 serial->去操作,而且不可以 QSerialPort   serial=new QSerialPort(); 这样去创建对象?要加*。
——————————————————————————————————————
——————————————————————————————————————
我想问下面的问题:
1.  不同的声明对象的方式  加*和不加*有什么区别?

2.  对象 -> 和  . 的方式有什么区别?

3. 这部分基础应该去看什么材料啊?好多教程上来就拖框框了,完全没有基础啊。

@yafeilinux
大佬求简单说几句


点评

你的这几个问题,实际上是C++的基础要学习的东西,建议最好还是补充一下基础! 1、带*的叫指针变量,通常new运算符得到;不带的,一般是临时变量(成员和全局变量的生命周期长点而已); 2、带*的操作通过->来实现,  详情 回复 发表于 2018-3-21 14:40
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2018-3-19 16:07:47 显示全部楼层
memorysevencat 发表于 2018-3-18 15:55
QSerialPort 对象声明放在 mainwindow.h、方法体还有带不带*号,使用起来 差别好大啊。
我尝试 ...

其实这个就是创建全局对象和临时对象的区别,你在函数体里面使用QSerialPort serial;这样创建的是临时变量,函数体执行完它就销毁了。
参与人数 1人气 +2 收起 理由
memorysevencat + 2 对我帮助很大!

查看全部评分总评分 : 人气 +2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了