5 Qter豆
本帖最后由 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函数之外,其他都是另一位同学用了初始化波特率等设置的代码。void setPort::on_comboBox_activated(const QString &arg1) { foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { mainwindow::myserial->setPort(info); if(mainwindow::myserial->open(QIODevice::ReadWrite)==true) //读写方式打开串口 { mainwindow::myserial->setPort(info); //myserial->setPort(info); mainwindow::myserial->setBaudRate(QSerialPort::Baud9600);//设置波特率9600 mainwindow::myserial->setDataBits(QSerialPort::Data8); //设置数据位8位 mainwindow::myserial->setStopBits(QSerialPort::OneStop); //设置停止位为一位 mainwindow::myserial->setParity(QSerialPort::NoParity); //设置没有校验位 } } } 复制代码 这里还要问一下,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中的其他对象发送指令的部分,如果跨类调用的问题不能解决,就基本没法使用同学的串口通信部分了。
也可能我的思路有问题,如果有经验的朋友能给指一条其他可行的道路,同样非常感谢!
我来回答