• 5383阅读
  • 7回复

关于Qt串口通信问题 [复制链接]

上一主题 下一主题
离线erick
 
只看楼主 倒序阅读 楼主  发表于: 2013-05-08
各位好,由于参加一个比赛,涉及到了单片机与上位机串口通信,Qt没接触几天,现在希望尽快实现串口接收数据功能
我按照http://hi.baidu.com/zhu8caizi/item/2a9a4da4a2de533a030a4de1 的方法进行了测试,
但在第一部分就卡住了
问题好像出在这里
void Widget::on_pushButton_clicked()  //发送数据
{
    myCom->write(ui->lineEdit->text().toAscii());               //以ASCII码形式将数据写入串口
                                                                                       //报错, 错误:C2039: “toAscii”: 不是“QString”的成员


}

这种错误让我非常困惑,百度谷歌好久都没有找到答案,自我怀疑是犯了什么低级错误但是自己查不出来,或者教程的Qt creator是4.6.3,我的是5.0.2?
希望各位能帮帮我不胜感激,您的几分钟会就会给我莫大的帮助,thanks man!

这是我从网上copy到编译器里的程序:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :    
QWidget(parent),    
ui(new Ui::Widget)
{  
     ui->setupUi(this);    
     myCom = new Win_QextSerialPort("COM1",QextSerialBase::EventDriven);    
//定义串口对象,指定串口名和查询模式,这里使用事件驱动EventDriven  
     myCom ->open(QIODevice::ReadWrite);    
//以读写方式打开串口    myCom->setBaudRate(BAUD9600);  
//波特率设置,我们设置为9600    
    myCom->setDataBits(DATA_8);   /
/数据位设置,我们设置为8位数据位    
    myCom->setParity(PAR_NONE);  
//奇偶校验设置,我们设置为无校验    
    myCom->setStopBits(STOP_1);    
//停止位设置,我们设置为1位停止位  
    myCom->setFlowControl(FLOW_OFF);  
//数据流控制设置,我们设置为无数据流控制    
    myCom->setTimeout(500);  
//延时设置,我们设置为延时500ms,这个在Windows下好像不起作用  
    connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));    
//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作}
Widget::~Widget()
{    
delete ui;
}
void Widget::readMyCom() //读取串口数据并显示出来
{    
QByteArray temp = myCom->readAll();  
//读取串口缓冲区的所有数据给临时变量temp    
ui->textBrowser->insertPlainText(temp);    
//将串口的数据显示在窗口的文本浏览器中
}
void Widget::on_pushButton_clicked()  //发送数据
{
    myCom->write(ui->lineEdit->text().toAscii());
    //以ASCII码形式将数据写入串口
}
离线leonchiong

只看该作者 1楼 发表于: 2013-05-08

myCom->write(ui->lineEdit->text().toLatin1().toHex());
离线leonchiong

只看该作者 2楼 发表于: 2013-05-08
如果text()里写的是十六进制形式 那最后的.toHex() 就去掉
离线erick
只看该作者 3楼 发表于: 2013-05-08
回 2楼(leonchiong) 的帖子
太感谢了!那个错误确实消失了,但是现在又来了两个link2019和link1120

widget.obj:-1: 错误:Link2019无法解析的外部符号 "public: __thiscall Win_QextSerialPort::Win_QextSerialPort(class QString const &,enum QextSerialBase::QueryMode)" (??0Win_QextSerialPort@@QAE@ABVQString@@W4QueryMode@QextSerialBase@@@Z),该符号在函数 "public: __thiscall Widget::Widget(class QWidget *)" (??0Widget@@QAE@PAVQWidget@@@Z) 中被引用
debug\mycom.exe:-1: 错误:LNK1120: 1 个无法解析的外部命令

请问你遇到过这样的情况么??解决这个问题应该在pro里面加什么东西??

离线leonchiong

只看该作者 4楼 发表于: 2013-05-08
在这里头文件里添加#include "win_qextserialport.h"
离线erick
只看该作者 5楼 发表于: 2013-05-08
回 4楼(leonchiong) 的帖子
唉……我加了啊……
我在widget.h里的头文件如下:

#include "win_qextserialport.h"
#include <QWidget>
#include <QString>

#include "qextserialbase.h"
#include "qextserialport.h"
离线leonchiong

只看该作者 6楼 发表于: 2013-05-08
那么我就没遇到过你的问题了
我也用的win_qextserialport   从来没有遇到过你这样的错误
离线erick
只看该作者 7楼 发表于: 2013-05-08
回 6楼(leonchiong) 的帖子
好的,同样谢谢你
快速回复
限100 字节
 
上一个 下一个