ui
门牙会稍息
原创
关注
3点赞·53人阅读
前言:
最近在学习嵌入式qt开发,然后跟着教程编写了一个简单的串口上位机程序,在编写的时候还算比较顺利,但在调试的时候花了点功夫,折腾了一下午。最后还是理清了思路,解决了问题,特写此博客进行记录和总结。
串口上位机界面设计:
整个软件的界面我都是用ui来设计的,其实也可以用代码,但是想了想有好多布局相互嵌套比较麻烦。最后就使用了ui界面来设计。
ui界面设计
串口上位机程序功能设计:
然后像串口对象初始化,槽函数,一些逻辑关系都用代码来实现,头文件就只有一些变量、槽的定义。
头文件
#include "widgeth"
#include "ui_widgeth"
#include <QMessageBox>
Widget::Widget(QWidget parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//lcd屏的分辨率是1024X600
this->setFixedSize(QSize(1024, 600));
//new 一个QSerialPort对象
serialPort = new QSerialPort(this);
//通过foreach语句将windows或imx6ull可用串口识别出来,并添加至对应的下拉选择框
QStringList serialList;
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
serialList += infoportName();
}
ui->comboBox->addItems(serialList);
//设置串口的信号与槽
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_radioButton_clicked(bool checked)
{
//点击“打卡串口”button之后的一些串口配置 *** 作,和一些逻辑关系
if(checked){
//设置串口端
serialPort->setPortName(ui->comboBox->currentText());
//设置波特率
serialPort->setBaudRate(ui->comboBox_2->currentText()toInt());
//设置停止位
serialPort->setStopBits(QSerialPort::StopBits(ui->comboBox_4->currentText()toInt()));
//设置数据位
serialPort->setDataBits(QSerialPort::DataBits(ui->comboBox_6->currentText()toInt()));
//设置校验位
switch(ui->comboBox_5->currentIndex()){
case 0:
serialPort->setParity(QSerialPort::Parity::NoParity);
break;
case 1:
serialPort->setParity(QSerialPort::Parity::EvenParity);
break;
case 2:
serialPort->setParity(QSerialPort::Parity::OddParity);
break;
case 3:
serialPort->setParity(QSerialPort::Parity::SpaceParity);
break;
case 4:
serialPort->setParity(QSerialPort::Parity::MarkParity);
break;
default:
break;
}
serialPort->setFlowControl(QSerialPort::NoFlowControl);
if(!serialPort->open(QSerialPort::ReadWrite)){
QMessageBox::about(this, "串口打开错误提示", "可能被占用了");
return;
}
//打开串口之后其他的选择按钮设置成不可用
ui->comboBox->setEnabled(false);
ui->comboBox_2->setEnabled(false);
ui->comboBox_4->setEnabled(false);
ui->comboBox_5->setEnabled(false);
ui->comboBox_6->setEnabled(false);
ui->radioButton->setText("关闭串口");
}
else{
serialPort->close();
ui->comboBox->setEnabled(true);
ui->comboBox_2->setEnabled(true);
ui->comboBox_4->setEnabled(true);
ui->comboBox_5->setEnabled(true);
ui->comboBox_6->setEnabled(true);
ui->radioButton->setText("打开串口");
}
}
void Widget::readData()
{
//将串口中的数据打印到textBrowser中
ui->textBrowser->insertPlainText(serialPort->readAll());
}
void Widget::on_pushButton_clicked()
{
//点击“发送”button之后,将textEdit中的内容写入串口
serialPort->write(ui->textEdit->toPlainText()toUtf8());
}
void Widget::on_pushButton_2_clicked()
{
//清屏 *** 作
ui->textEdit->clear();
ui->textBrowser->clear();
}
登录后复制
在windows端编写好程序之后,将工程文件发送到ubuntu进行qmake、make最后通过scp将ARM的可执行文件发送到开发板,接下来就是验证了
我用的是正点原子出厂的系统,所以在验证的时候需要使用到一个串口来连接到开发板执行编写好的上位机程序,所以一个串口就被占用了,正点原子教程视频就用开发板的另一个串口来进行测试
正点原子教程测试方式
因为放假回了家,我也没有带太多的东西,usb转ttl模块放在了学校。所以我在想怎么就用一个串口来完成实验。困扰我的就是唯一的一个串口必须留个上位机,然后要怎么执行开发板上的串口上位机程序?最初我想到了可以使用网络通过Xshell远程连接到开发板就可以执行,唯一的串口就拿来验证。
解决完上位机软件怎么在imx6ull上执行的问题,接下来就是验证了。验证的时候又出现了一些问题,上位机软件不像想象的那样一边发数据,一边就接收对应的数据,而出现了一些imx6ull的信息,好像还可以输入命令,感到非常奇怪。
我以为我的软件有问题,就在windows上换了一个串口软件,结果还是出现了类似的情况
最后也是在不断猜想和测试之后找到了原因,就是应因为我在给开发板上电的时候接入了串口线,然后先打开了windows上的串口,然后就使用到了串口,导致就相当于有一个串口控制imx6ull开发板,像Xshell中通过串口连接开发板一样。然后我尝试在windows的上位机软件输入命令想打开一个qt程序,最后也是成功打开证实了猜想
执行/list命令打开了蛇姐list程序(qt程序的路径是/home/root/qt_project/list)
如果想要实现实验最初windows和imx6ull两个上位机互换数据的效果的话。要先通过windows中的上位机软件输入命令来打开imx6ull的上位机软件,这样相当于windows中的上位机连接的就是imx6ull的上位机了,而不是直接控制imx6ull了,之后就可以正常收发数据了。
总结:
学了qt快半个月了,这个串口上位机算是一个比较综合的练习了,结合了ui和代码设计。加上最后的调试也是收获颇多,如果有usb-ttl模块的话验证步骤就会更简单。
1首先将QT的以下两个路径添加至系统环境变量Path中,以半角(英文)分号分隔,前者是windeployqtexe所在路径,后者是g++exe所在路径,拷贝DLL时要用到:
C:\Qt\Qt570\57\mingw49_32\bin
C:\Qt\Qt570\Tools\mingw492_32\bin
2工具也就是windeployqtexe路径(以实际安装目录为准)为:C:\Qt\Qt570\57\mingw49_32\bin\windeployqtexe
3在exe所在目录新建文本文档(后续会改为批处理程序bat后缀),自定义命名,如AutoGetDLLtxt,并添加以下内容:
for /r "%cd%" %%i in (exe) do (
C:\Qt\Qt570\57\mingw49_32\bin\windeployqtexe "%%~nxi")
pause
注意:批处理语句中的C:\Qt\Qt570\57\mingw49_32\bin\windeployqtexe是windeployqtexe实际所在路径,在QT安装目录下搜索windeployqtexe即可定位所在路径。
4修改txt后缀为bat:
5运行bat(批处理)程序即可将程序依赖的DLL拷贝至程序所在目录:
6exe依赖的dll拷贝成功,程序正常运行!
不可以
1路径中使用斜杠/和反斜杠\的区别
Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符。
Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不混淆,所以采用 反斜杠\ 作为路径分隔符。所以目前windows系统上的文件浏览器都是用 反斜杠\ 作为路径分隔符。随着发展,DOS系统已经被淘汰了,命令提示符也用的很少,斜杆和反斜杠在大多数情况下可以互换,没有影响。
知道这个背景后,可以总结一下结论:
(1)浏览器地址栏网址使用 斜杆/ ;
(2)windows文件浏览器上使用 反斜杠\ ;
(3)出现在html url() 属性中的路径,指定的路径是网络路径,所以必须用 斜杆/ ;
<div style="background-image:url(/Image/Control/titlejpg); background-repeat:repeat-x;
padding:10px 10px 10px 10px"></div>
// 如果url后面用反斜杠,就不会显示任何背景
(4)出现在普通字符串中的路径,如果代表的是windows文件路径,则使用 斜杆/ 和 反斜杠\ 是一样的;如果代表的是网络文件路径,则必须使用 斜杆/ ;
<img src="\Image/Control/dingjpg" /> // 本地文件路径,/ 和 \ 是等效的
<img src="/Image\Control\caijpg" />
<img src=">
qdir没有setcurrentPath呀,倒是有一个setcurrent,这个是设置程序的工作目录,应该是一个类似于临时path变量的东西。不知道你要当前目录干什么,你有可能弄错了setcurrent的作用。
方法/步骤
1
首先你得装上vs ide,我使用的是vs2008 ide 开发平台。很多人不喜欢在qt Creator(qt自己的开发ide)上进行开发,使用vs开发的时候可以包含qt和Opengl,这样的话具有很好的集成度。
2
下面就是安装qt,
3
下面是运行安装即可,先装运行库,再装vs qt插件。一键式安装,下一步和选择路径即可。
4
首先配置qt的安装环境,进入vs,会看到菜单栏上面多了一个qt的选项,点击打开qt Option。其会自动检测文件安装路径。
5
下面是配置你调用的qt库文件的文件路径,一般配置lib文件夹和Include文件夹的位置即可。
点击“工具”-->“选项”-->“项目和解决方案”-->“vc++目录”
6
此外还有就是配置qt运行的环境变量,好告诉链接器连接的路径信息。
右击“我的电脑”-->“高级系统设置”-->“高级”-->“环境变量”
7
找到Path路径选项,进行按下编辑按钮进行添加修改。添加qt运行文件的目录。
8
添加完成以后,进行简单的测试。按下Win+R键或者打开“运行”界面,输入cmd,跳出dos界面,输入qmake,看解析器能不能识别命令,识别成功的话就是加载成功。
9
这里qt环境安装就已经完成了,此外还有一个要说明,开发qt程序的时候要将相应dll的目录包含进来,或者直接把qt的相关dll拷贝到你的开发文件目录下,这样有利于你的开发可以移植。
还有一个要注意的,就是你可以不用在vs中加载qt的绝对路劲,可以在刚刚的环境变量界面中添加,因为vs下本来就包含了Path目录。
只是大家一般不这么做,这样是所有的应用程序都知道qt的库文件在哪。
10
下面是Opengl环境的安装,相对来说简单一些,基本步骤也差不多。
我使用的是比较老但很稳定的 Opengl glu 37版本。
由于Opengl相对来说比较小,只是一个开发库,下载下来了以后,可以把它整合到vs中去,也可以自己放在特定的地方,然后像上面说的一样加上路径就可以。
这里说的是将Opengl整合到vs中去的方法。
11
你在网上资源有两种,一种是提供源代码的,你可以自己添加编译生成dll和LIB文件,也可以下载现成的资源,这里面使用现成的资源。
12
找到你的vs安装目录,将你的gluth放到这个include\gl文件夹文件夹里。没有gl文件夹可以自己建一个。将glutlib和glut32lib放到静态函数库所在文件夹,即lib文件夹。将glutdll和glut32dll放到 *** 作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32)这是非常重要的动态链接库设置!
比如我的vs2008的目录就是C:\Program Files\Microsoft Visual Studio 90\vc
H文件放到C:\Program Files\Microsoft Visual Studio 90\vc\include\GL
LIB文件放到C:\Program Files\Microsoft Visual Studio 90\vc\Lib
但是记得你使用的是哪个DLL和LIB文件还是要加到你的开发目录中的。
这里就不详述了。
13
下面大致的就配置好了Qt和OpenGL的开发环境。
以上就是关于正点原子linux开发板怎么调试全部的内容,包括:正点原子linux开发板怎么调试、qt复制程序带行数、程序里////后面的路径可以忽略吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)