qt中怎么qt tcp 实现文件传输两个类之间的数据传输

简述如何在Qt中实现串口通信
用圣才电子书APP或微信扫一扫,在手机上阅读本文,也可分享给你的朋友。
本文所将内容是在Qt中实现串口通信,文字描述不多,基本上是代码实现。之前本人做过类似的小程序,不过那个是基于线程的。那么接下来看看本篇文字吧!
首先,加入了&打开串口&,&关闭串口&&传送数据&三个按钮,加入了一个行编辑框Line Edit。它们的命名如下:
&打开串口&按钮命名为:openMyComBtn
&关闭串口&按钮命名为:closeMyComBtn
&传送数据&按钮命名为:sendMsgBtn
要传送数据的行编辑框命名为:sendMsgLineEdit
界面如下图。
第二步,在&打开串口&按钮上右击,选择Go to slot选项,然后选择clicked()选项,进入它的单击事件槽函数中,将上个程序中在构造函数里写的语句全部剪切到这里。然后加入几句按钮的状态设置语句。如下:
1.void&MainWindow::on_openMyComBtn_clicked() &
3.struct&PortSettings&myComSetting&=&{BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500}; &
4.//定义一个结构体,用来存放串口各个参数 &
5.myCom&=&new&Win_QextSerialPort(&com1&,myComSetting,QextSerialBase::EventDriven); &
6.//定义串口对象,并传递参数,在构造函数里对其进行初始化 &
7.myCom&-open(QIODevice::ReadWrite); &
8.//以可读写方式打开串口 &
9.connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom())); &
10.//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作 &
12.ui-openMyComBtn-setEnabled(false);&//打开串口后&打开串口&按钮不可用 &
13.ui-closeMyComBtn-setEnabled(true);&//打开串口后&关闭串口&按钮可用 &
14.ui-sendMsgBtn-setEnabled(true);&//打开串口后&发送数据&按钮可用 &
然后在构造函数里也添加几句按钮初始状态设置语句,如下:
1.MainWindow::MainWindow(QWidget&*parent) &
2.:&QMainWindow(parent),&ui(new&Ui::MainWindow) &
4.ui-setupUi(this); &
5.ui-closeMyComBtn-setEnabled(false);&//开始&关闭串口&按钮不可用 &
6.ui-sendMsgBtn-setEnabled(false);&//开始&发送数据&按钮不可用 &
更改后程序如下图所示:
这时运行程序,效果如下:
第三步,按上面的方法进入&关闭串口&按钮和&发送数据&按钮的单击事件的槽函数,更改如下。
1.void&MainWindow::on_closeMyComBtn_clicked()&&&&&&//关闭串口槽函数 &
3.myCom-close();&&&&&//关闭串口,该函数在win_qextserialport.cpp文件中定义 &
4.ui-openMyComBtn-setEnabled(true);&//关闭串口后&打开串口&按钮可用 &
5.ui-closeMyComBtn-setEnabled(false);&//关闭串口后&关闭串口&按钮不可用 &
6.ui-sendMsgBtn-setEnabled(false);&//关闭串口后&发送数据&按钮不可用 &
8.void&MainWindow::on_sendMsgBtn_clicked()&&&&&&&//发送数据槽函数 &
10.myCom-write(ui-sendMsgLineEdit-text().toAscii());&&&& &
11.//以ASCII码形式将行编辑框中的数据写入串口 &
最终效果如下:
(将数据x发送给单片机,单片机返回you send message is : x)
小结:关于在Qt中实现串口通信的内容就说这么多,由于之前做过类似的小程序,所以比较感兴趣,希望你能用到呢这方面的知识。
&来源:网络
小编工资已与此赏挂钩!一赏一分钱!求打赏↓ ↓ ↓
如果你喜欢本文章,请赐赏:
已赐赏的人
我的电子书qt不同类间的传值-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
qt不同类间的传值
来源:互联网 发表时间: 19:01:41 责任编辑:鲁晓倩字体:
为了帮助网友解决“qt不同类间的传值”相关的问题,中国学网通过互联网对“qt不同类间的传值”相关的解决方案进行了整理,用户详细问题包括:主窗口mainwindow,点击一个按钮后弹出一个dialog,dialog里面有combobox,和一个pushbutton,点击pushbutton关闭dialog并且把combobox里面的数据送给mainwindow,mainwindow在通过这个数据来做相应的变化&&。&&怎么解决啊&&不想用定义全局变量的方式&,具体解决方案如下:解决方案1:还可以通过信号与槽机制和public函数接口.1.使用QT中的Signal&Slot机制进行传值:QT中的Signal&Slot机制相比于MFC中的消息机制简单了许多,它保证了任何对象之间均可以通过这种方式进行通信,甚至可以得到消息的sender。这里就拿一个简单的窗体间传值作为例子。首先看一下主窗体MainWindow:在设计器中拖拽一个Label和一个TextEdit控件到界面上,TextEdit用于显示传递过来的数据。创建一个右下有两个按键的对话框,放置一个Label和一个LineEdit。下面就是编码的操作了,我们需要在Dialog中声明一个信号,当用户点击OK时传递LineEdit中的内容到mainWindow中,具体的dialog.h代码为:#ifndef&DIALOG_H#define&DIALOG_H#include&&QDialog&namespace&Ui&{class&D}class&Dialog&:&public&QDialog{&&&&Q_OBJECT&&&&public:&&&&explicit&Dialog(QWidget&*parent&=&0);&&&&~Dialog();&&&&private:&&&&Ui::Dialog&*signals:&&&&void&&sendData(QString);private&slots:&&&&void&on_buttonBox_accepted();};#endif&//&DIALOG_H其中的signals:void&sendData(QString)便是我们需要的信号函数,同时声明了一个槽函数void&on_buttonBox_accepted();用于相应确定按钮的click事件。下面就是需要在该函数中产生一个信号。代码如下:void&Dialog::on_buttonBox_accepted(){&&&&emit&sendData(ui-&lineEdit-&text());}代码异乎寻常的简单,只需要用emit的方式调用sendData函数,将需要的参数传递进去即可。而MainWindow中则需要声明接收的槽函数,注意槽函数参数只能比信号函数少或相等,而不能多于信号函数参数个数。在MainWindow的头文件中声明槽函数:private&slots:&&&&void&receiveData(QString&data);为了便于测试,我只在MainWindow的构造函数中创建了一个Dialog对象,并连接了信号和槽,具体为:MainWindow::MainWindow(QWidget&*parent)&:&&&&QMainWindow(parent),&&&&ui(new&Ui::MainWindow){&&&&ui-&setupUi(this);&&&&//信号槽方式下父子窗体传值的测试&&&&Dialog&*dlg&=&new&D&&&&//关联信号和槽函数&&&&connect(dlg,SIGNAL(sendData(QString)),this,SLOT(receiveData(QString)));&&//&dlg-&setModal(true);&不论是模态或者非模态都可以正常传值&&&&dlg-&show();}这里,我没有将父窗口的指针传递到Dialog中,如new&Dialog(this),这种方式下,实际上可以归结到第三类传值方式中去。因为此时,可以使用MainWindow中的父窗口的函数进行数据的赋值和操作。这里,可能还有一个问题就是,父窗口如何给子窗口传值,一方面,仍然可以使用信号和槽的方式进行,但是,我感觉更便利的方式倒是使用这种public接口的方式进行传值。这种来的更直接和明显。当然,可以看出Signal&Signal方式进行此类的处理会更有通用性。在receiveData(QString)的槽函数中进行接收到数据的处理,这里仅仅进行了简单的显示:void&MainWindow::receiveData(QString&data){&&&&ui-&textEdit-&setText(data);}最后看下结果:最终的结果,因为信号和槽可以是多对多的,所以,在类似多个窗体广播信息时,这种方式就很有用,当然也可以使用全局变量的形式。Qt窗体间传值之public函数接口mainwindow.cppvoidMainWindow::on_btn2_clicked(){Dialog*dlg=newDdlg-&setData(ui-&le1-&text());dlg-&show();}dialog.h&public:explicitDialog(QWidget*parent=0);~Dialog();voidsetData(QStringdata);dialog.cppvoidDialog::setData(QStringdata){ui-&le2-&setText(data);}在前两篇博文中(见&/Linux/99.htm&与&/Linux/01.htm&),已经展示了两种窗体间传值的方式,这里介绍另一种,使用public函数接口的方式,这里就牵扯到两个方向间的传值,父到子以及子到父窗口,通过这种方式都很容易做到,如子到父,可以在子窗体中实现一个public方法如prepareDoingData(&data),将需要处理的data的引用传递到子窗体,子窗体中可以对其进行操作,这里展示父到子的传值:在Dialog界面中增加一个TextEdit用于显示最终传递的内容,并增加一个公有的方法:public:&&&&void&setTextEditData(QString&data);void&Dialog::setTextEditData(QString&data){&&&&ui-&textEdit-&setText(data);}上面部分是在头文件中的内容,下面为在.cpp中的内容,而在mainwindow.cpp中只需要进行调用即可:&&&&dlg-&setTextEditData(QString("我来测试公有接口方式传值!"));最终的结果至此,三种传值的方式已经全部讲解完毕,具体在项目中国使用哪种方式进行传值,则要视具体情况而定。个人感觉,基本传值可以采用信号槽方式降低耦合,系统配置可以使用单例模式然后在各个界面中进行配置,而public接口方式则适用于父子间窗体传值。解决方案2:引用&楼主&gldcpp&的回复:主窗口mainwindow,点击一个按钮后弹出一个dialog,dialog里面有combobox,和一个pushbutton,点击pushbutton关闭dialog并且把combobox里面的数据送给mainwindow,mainwindow在通过这个数据来做相应的变化&&。&&怎么解决啊&&不想用定义全局变量的方式&图片没显示出来,你到这个网址上面看也可以&&/Linux/99.htm解决方案3:上面写的太详细了。发个带参数的信号过去,在mainwindow里面用槽来接收这样比较容易点吧。解决方案4:1、使用信号槽机制进行传递2、自己实现观察者模式(这里没必要、大材小用)3、自定义Event
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号随笔 - 859Qt creator 不同类 之间参数的传递_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Qt creator 不同类 之间参数的传递
来源:Linux社区&
作者:acanoe
Qt creator 方法一:使用extern 传递参数args
三个文件 a.h& a.cpp&& 和 b.cpp
1、在a.cpp 中定义参数
2、在a.h 中继承参数
3、在b.cpp 中添加#include "a.h"
然后你就能使用args 这个参数了,这个办法项目qt 中的Signal 和 Slot 来说的有点,就是他不需要你实时触发,只需要你最后监听args 的值,然后产生相应的动作就行。
情况2, 在主界面上要弹出一个 需要一个密码 登录验证的界面。
比如 触发LineEdit 就弹出一个键盘,这种情况。
需要改写LineEdit 类。比较复杂,之后我再写。
相关资讯 & & &
& (11/27/:36)
& (04/24/:32)
& (02/26/:11)
& (07/02/:43)
& (04/04/:41)
& (01/12/:41)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 udp实现可靠数据传输 的文章

 

随机推荐