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

QT串口通信之跨类调用对象问题

1
回复
6659
查看
[复制链接]
累计签到:9 天
连续签到:1 天
来源: 2016-11-16 20:15:48 显示全部楼层 |阅读模式
5Qter豆
本帖最后由 mhzzz 于 2016-11-16 20:45 编辑

我的小组需要给一个传感器编写界面和串口通信,界面由我负责,串口通信由另外一位同学负责。我们两个是分开做的,现在遇到了一些整合上的问题,特来请教。
同学的串口通信都写在了一个mainwindow.cpp文件中,里面的各种对象,函数也都包含在mainwindow.h头文件中。因为图方便,在mainwindow.cpp文件中直接用一个pushButton确定了“波特率(9600)”、“校验位”、“停止位”等参数。
但是这个传感器产品需要有一个启动界面,在启动界面中要可以设置不同的波特率(也就是用comboBox,包含2400,4800,9600,19200这四个选择),选定其中的一个来作为最终的波特率。
这个启动界面在图片附件中,我在该项目中又新增加了一个该界面的Qt设计师的项目(为setPort.cpp、setPort.h和setPort.ui),来写这个设置波特率的界面。在setPort.ui中选中comboBox转到槽,得到void setPort::on_comboBox_activated(const QString &arg1),应该可以只要comboBox里的选项发生变化,就把这个值传给同学写的设置波特率的对象mySerial(已定义QSerialPort* myserial;)。
我想传递的代码如下:除了void函数之外,其他都是另一位同学用了初始化波特率等设置的代码。
  1. void setPort::on_comboBox_activated(const QString &arg1)
  2. {
  3.     foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
  4.     {
  5.         mainwindow::myserial->setPort(info);
  6.         if(mainwindow::myserial->open(QIODevice::ReadWrite)==true) //读写方式打开串口
  7.         {
  8.             mainwindow::myserial->setPort(info);
  9.             //myserial->setPort(info);
  10.             mainwindow::myserial->setBaudRate(QSerialPort::Baud9600);//设置波特率9600
  11.             mainwindow::myserial->setDataBits(QSerialPort::Data8);  //设置数据位8位
  12.             mainwindow::myserial->setStopBits(QSerialPort::OneStop); //设置停止位为一位
  13.             mainwindow::myserial->setParity(QSerialPort::NoParity);  //设置没有校验位
  14.         }
  15.     }
  16. }
复制代码
这里还要问一下,mainwindow::myserial->setBaudRate(QSerialPort::Baud9600);//设置波特率9600,这句应该怎么改才能接收comboBox中的数值作为波特率?

但是 运行会报错,错误为
error: invalid use of non-static data member 'mainwindow::myserial' QSerialPort* myserial;
                   ^
setPort.cpp即使包含了mainwindow.h头文件,确还是不能访问myserial对象,在定义了myserial的头文件中改为static:QSerialPort* myserial;,则mainwindow.cpp(串口通信部分)中myserial会报其他错误
目前本人正在纠结中,不知道该如何跨类调用这个myserial对象,因为后边还有在其他新的窗口给mainwindow.cpp中的其他对象发送指令的部分,如果跨类调用的问题不能解决,就基本没法使用同学的串口通信部分了。

也可能我的思路有问题,如果有经验的朋友能给指一条其他可行的道路,同样非常感谢!



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:9 天
连续签到:1 天
2016-11-22 12:48:31 显示全部楼层
setBaudRate(combobox->currentText())可以设置comboBox中的数值作为波特率
非静态成员不能用::符号,要先实例化,再调用.
回复

使用道具 举报

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

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