搜档网
当前位置:搜档网 › Qt串口通信专题教程

Qt串口通信专题教程

Qt串口通信专题教程
Qt串口通信专题教程

Qt串口通信专题教程

查看以前的教程:Qt编写串口通信程序全程图文讲解

查看Wincom和Lincom介绍:Qt跨平台串口通信软件Wincom与Lincom

下载软件,文档和源码:资源下载

——————————————2010年7月8日更新——————————————–

网友赵文杰使用多线程完成的linux下的串口通信。

下载源码:下载

—————————————————————————————————————

以下是正文:

前言

去年我使用Qt编写串口通信程序时,将自己的学习过程写成了教程(Qt编写串口通信程序全程图文讲解),但是由于时间等原因,我只实现了Windows下的串口通信,并没有去做Linux下的。自从教程发布到网上后,就不断有人提出相关的问题,而其中问的最多的就是,怎样在Linux下实现串口通信。因为有计划安排,而且没有开发板,所以一直没能去研究,也就没能给出很好的解决办法。前些天,网友hqwfreefly用Qt写了一个叫linucom的Linux下串口调试程序,实现了Linux的串口通信。而且,正好现在我有几天假期,所以就和hqwfreefly 合作,将linucom更新为Lincom,并且推出了Windows下的Wincom,然后完成了这篇Qt编写串口通信程序的专题教程,也算完成了我的一个心愿。

教程概述

该教程分三部分讲述,第一部分讲解qextserialport类的一些东东;第二部分讲解在Windows下使用qextserialport类实现串口通信的方法,这里将讲述两种不同的方法;第三部分讲解在Linux下利用qextserialport类实现串口通信的方法。

在这个教程中我们更注重知识的讲解,而不是界面的设计。关于界面和其他应用问题,你可以查看以前的串口通信教程或者查看一下Wincom软件的源码。

第一部分Qextserialport类介绍

在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也使用了该类。

一、文件下载

文件下载地址:

https://www.sodocs.net/doc/d51589597.html,/projects/qextserialport/files/

也可以下载我上传到网盘上的:

http://good.gd/494307.htm

二、文件内容介绍

1.下载到的文件为qextserialport-1.2win-alpha,解压并打开后其内容如下。

(点击图片可以查看清晰大图)

下面分别介绍:

(1)doc文件夹中的文件内容是QextSerialPort类和QextBaseType的简单的说明,我们可以使用记事本程序将它们打开。

(2)examples文件夹中是几个例子程序,可以看一下它的源码,不过想运行它们好像会出很多问题啊。

(3)html文件夹中是QextSerialPort类的使用文档。

(4)然后就是剩下的几个文件了。其中qextserialenumerator.cpp及qextserialenumerator.h文件中定义的QextSerialEnumerator类是用来获取平台上可用的串口信息的。不过,这个类好像并不怎么好用,而且它不是我们关注的重点,所以下面就不再介绍它了。

(5)qextserialbase.cpp和qextserialbase.h文件定义了一个QextSerialBase 类,win_qextserialport.cpp和win_qextserialport.h文件定义了一个

Win_QextSerialPort类,posix_qextserialport.cpp和

posix_qextserialport.h文件定义了一个Posix_QextSerialPort类,qextserialport.cpp和qextserialport.h文件定义了一个QextSerialPort类。这个QextSerialPort类就是我们上面所说的那个,它是所有这些类的子类,是最高的抽象,它屏蔽了平台特征,使得在任何平台上都可以使用它。

2.几个类的简单介绍。

下面是这几个类的关系图。

可以看到它们都继承自QIODevice类,所以该类的一些函数我们也可以直接来使用。图中还有一个QextBaseType类,其实它只是一个标识,没有具体的内容,它用来表示Win_QextSerialPort或Posix_QextSerialPort中的一个类,因为在QextSerialPort类中使用了条件编译,所以QextSerialPort类既可以继承自

Win_QextSerialPort类,也可以继承自Posix_QextSerialPort类,所以使用了QextBaseType来表示。这一点我们可以在qextserialport.h文件中看到。再说QextSerialPort类,其实它只是为了方便程序的跨平台编译,使用它可以在不同的平台上,根据不同的条件编译继承不同的类。所以它只是一个抽象,提供了几个构造函数而已,并没有具体的内容。在qextserialport.h文件中的条件编译内容如下:

/*POSIX CODE*/

#ifdef_TTY_POSIX_

#include“posix_qextserialport.h”

#define QextBaseType Posix_QextSerialPort

/*MS WINDOWS CODE*/

#else

#include“win_qextserialport.h”

#define QextBaseType Win_QextSerialPort

#endif

所以,其实我们没有必要使用这个类,直接使用Win_QextSerialPort或

Posix_QextSerialPort就可以了。当然如果你想使用这个类,实现同样的源程序可以直接在Windows和Linux下编译运行,那么一定要注意在Linux下这里需要添加#define_TTY_POSIX_。而我们这里为了使得程序更明了,所以没有使用该类,下面也就不再介绍它了。

QextSerialBase类继承自QIODevice类,它提供了操作串口所必需的一些变量和函数等,而Win_QextSerialPort和Posix_QextSerialPort均继承自QextSerialBase类,Win_QextSerialPort类添加了Windows平台下操作串口的一些功能,Posix_QextSerialPort类添加了Linux平台下操作串口的一些功能。所以说,在Windows下我们使用Win_QextSerialPort类,在Linux下我们使用Posix_QextSerialPort类。

3.在QextSerialBase类中还涉及到了一个枚举变量QueryMode。

它有两个值Polling和EventDriven。QueryMode指的是读取串口的方式,下面我们称为查询模式,我们将Polling称为查询方式Polling,将EventDriven称为事件驱动方式。

事件驱动方式EventDriven就是使用事件处理串口的读取,一旦有数据到来,就会发出readyRead()信号,我们可以关联该信号来读取串口的数据。在事件驱动的方式下,串口的读写是异步的,调用读写函数会立即返回,它们不会冻结调用线程。

而查询方式Polling则不同,读写函数是同步执行的,信号不能工作在这种模式下,而且有些功能也无法实现。但是这种模式下的开销较小。我们需要自己建立定时器来读取串口的数据。

在Windows下支持以上两种模式,而在Linux下只支持Polling模式。

三、小结。

这里讲了这么多,最后要说的只是,我们在Qt中使用这个类编写串口程序,根据平台的不同只需要分别使用四个文件。

在Windows下是:

qextserialbase.cpp和qextserialbase.h以及win_qextserialport.cpp和win_qextserialport.h

在Linux下是:

qextserialbase.cpp和qextserialbase.h以及posix_qextserialport.cpp和posix_qextserialport.h

而在Windows下我们可以使用事件驱动EventDriven方式,也可以使用查询Polling方式,但是在Linux下我们只能使用查询Polling方式。

第二部分在Windows下编写串口通信程序

我们的环境是Windows xp,Qt4.6.3及Qt Creator2.0。

第一,下面我们首先使用事件驱动来实现串口通信。

1.新建工程。

我们在Qt Creator中新建Qt Gui工程,命名为myCom,Base Class选择QWidget。

2.添加文件。

我们将那四个文件添加到工程文件夹中。如下图。

夹上点击鼠标右键,在弹出的菜单中选择“Add Existing Files”菜单。如下图。

我们在弹出的对话框中选中四个文件,按下“打开”按钮即可,如下图。

最终工程文件列表如下图。

3.更改界面。

我们将界面设计如下。

其中的Text Browser部件用来显示接收到的数据,Line Edit部件用来输入要发送的数据,Push Button按钮用来发送数据。我们保持各部件的属性为默认值即可。

4.我们在widget.h文件中进行对象及函数声明。

添加头文件包含:#include“win_qextserialport.h”

然后在private中声明对象:Win_QextSerialPort*myCom;

声明私有槽函数:

private slots:

void on_pushButton_clicked();//”发送数据”按钮槽函数

void readMyCom();//读取串口

5.在widget.cpp文件中进行更改。

在构造函数中添加代码,完成后,构造函数内容如下:

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()));

//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作

}

实现槽函数:

void Widget::readMyCom()//读取串口数据并显示出来

QByteArray temp=myCom->readAll();

//读取串口缓冲区的所有数据给临时变量temp

ui->textBrowser->insertPlainText(temp);

//将串口的数据显示在窗口的文本浏览器中

}

void Widget::on_pushButton_clicked()//发送数据{

myCom->write(ui->lineEdit->text().toAscii());

//以ASCII码形式将数据写入串口

}

6.此时,我们运行程序,效果如下。

可以看到,已经成功完成通信了。

(注:我们这里下位机使用的是单片机,它使用串口与计算机的COM1相连。单片机上运行的程序的功能是,接收到一个字符便向上位机发送一个字符串然后发送接收到的字符。)

两个重要问题的讲解:

一、关于数据接收。

我们想在程序中对接收的数据进行控制,但是readyRead()信号是一旦有数据到来就发射的,不过我们可以使用bytesAvailable()函数来检查已经获得的字节数,从而对数据接收进行控制。

(1)我们在widget.cpp中添加头文件包含:#include

然后在读串口函数中添加一行代码,如下:

void Widget::readMyCom()//读取串口数据并显示出来

{

qDebug()<<“read:“<bytesAvailable()<<”bytes”;

//我们输出每次获得的字节数

QByteArray temp=myCom->readAll();

ui->textBrowser->insertPlainText(temp);

}

运行程序,效果如下:

可以看到,我们获取的数据并不是一次获得的。

(2)利用上面的结论,我们可以让串口缓冲区拥有了一定的数据后再读取。void Widget::readMyCom()

{

if(myCom->bytesAvailable()>=8)

//如果可用数据大于或等于8字节再读取

{

qDebug()<<“read:“<bytesAvailable()<<”bytes”;

QByteArray temp=myCom->readAll();

ui->textBrowser->insertPlainText(temp);

}

}

运行程序,效果如下:

我们发送了两次数据,可以看到,这样实现了每8个字节读取一次,而最后剩余的不够8个字节的数据将会和后面的数据一起读出。

然后我们将8改为3,发送一次数据,效果如下:

改为7,发送两次数据,效果如下:

改为11,发送两次数据,效果如下:

改为17,发送三次数据,效果如下:

重要结论:我们发送一次数据,应该获得37字节的数据,然后我们对比上面的结果,发现了什么?是的,其实串口每次读取8字节的数据放到缓冲区,只有数

据总数小于8字节时,才会读取小于8字节的数据。为了再次验证我们的结论,我们可以将上面程序中的“>=”改为“==”,那么只有8的倍数才能读取数据(当然这里37也可以),你可以测试一下。

关于接收数据方面,可以根据你自己的需要再去进行研究和改进,这里只是抛砖引玉。

二、关于发送数据。

我们也可以使用函数获取要发送的数据的大小,这里有个bytesToWrite()可以获取要发送的字节数。例如将发送数据更改如下:

void Widget::on_pushButton_clicked()//发送数据

{

myCom->write(ui->lineEdit->text().toAscii());

qDebug()<<“write:“<bytesToWrite()<<”bytes”;

//输出要发送的字节数

}

运行后效果如下:

当然,对于要发送的数据的大小我们不是很关心,而且它还有很多方法可以实现,这个还有个bytesWritten()信号函数来获取已经发送的数据的大小,不过好像它不是很好用。这里将它们提出来,只是供大家参考而已。

第二,使用查询方式Polling来实现串口通信。

这里再次说明,Polling方式是不能使用readyRead()信号的,所以我们需要自己设置定时器,来不断地读取缓冲区的数据。

1.我们在widget.h中声明一个定时器对象。

添加头文件包含:#include

添加private变量:QTimer*readTimer;

2.我们在widget.cpp文件中的构造函数中更改。

(1)将串口定义更改为:

myCom=new Win_QextSerialPort(“COM1″,QextSerialBase::Polling);

//定义串口对象,指定串口名和查询模式,这里使用Polling

(2)定义定时器,并将以前的关联更改为定时器的关联。

readTimer=new QTimer(this);

readTimer->start(100);

//设置延时为100ms

connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()));

//信号和槽函数关联,延时一段时间,进行读串口操作

3.此时运行程序,便可以正常收发数据了。

重点:关于延时问题。

上面的程序中可以进行数据的接收了,但是好像中间的延时有点长,要等一会儿才能收到数据,而且即便我们将定时器改为10ms也不行。问题在哪里呢?其实真正控制串口读写时间的不是我们的定时器,而是延时timeout。我们在构造函数中设置了延时:

myCom->setTimeout(500);

//延时设置,我们设置为延时500ms

我们前面说延时并不起作用,那是因为是在事件驱动的情况下,一旦有数据到来就会触发readyRead()信号,所以延时不起作用。但是现在,真正控制串口读写数据间隔的就是这个函数。这里值得注意,我们现在所说的串口读写是指底层的串口读写,从上面的程序中我们也可以看到,我们每隔100ms去读串口,确切地说,应该是去读串口缓冲区。而timeout才是正真的读取串口数据,将读到的数据放入串口缓冲区。所以如果timeout时间很长,即便我们的定时器时间再短,也是读不到数据的。所以我们这里需要将timeout设置为较小的值,比如10。

我们更改代码:

myCom->setTimeout(10);

这样再运行程序,我们就可以很快地获得数据了。

关于数据接收:事件驱动那里的结论依然有用,不过这里更多的是靠读取的时间间隔来控制。

关于发送数据:这时bytesToWrite()函数就不再那么好用了。

第三部分在Linux下编写串口通信程序

我这里的环境是Ubuntu10.04,Qt 4.6.3和Qt Creator2.0。上面已经提到,在Linux下只能使用Polling的方式读取串口数据,所以我们将上面Windows 下的应用Polling的程序在Linux下重新编译。我们使用Qt Creator打开该工程,然后进行下面的操作。

1.文件替换。

将工程中的win_qextserialport.cpp和win_qextserialport.h文件替换成posix_qextserialport.cpp和posix_qextserialport.h文件。

(1)我们先删除工程中的win_qextserialport.cpp和win_qextserialport.h 文件。

在工程列表中用鼠标右击win_qextserialport.h,然后选择“Remove File”选项。如下图。

在弹出的对话框中我们选中“Delete file permanently”选项,确保删除了工程文件夹中的文件。如下图。

然后我们使用同样的方法删除win_qextserialport.cpp文件。

(2)我们按照Windows下添加文件的方法,向工程中添加

posix_qextserialport.cpp和posix_qextserialport.h文件。最终工程文件列表如下。

2.设置编码。

(这是因为两个系统使用的默认编码不同造成的,如果你那里没有该问题,可以跳过这一步)

现在我们打开widget.cpp文件,发现中文出现乱码,而且无法编辑。在编辑器最上面有一个黄色提示条和一个“Select Encoding”按钮,我们点击该按钮。如下图。

在弹出的对话框中我们选择“GB2312”。按下“Reload with Encoding”按钮,中文就可以正常显示了。

3.更改程序。

在widget.h文件中:

将以前的#include“win_qextserialport.h”更改为#include

“posix_qextserialport.h”

将以前的Win_QextSerialPort*myCom;更改为Posix_QextSerialPort*myCom;在widget.cpp文件中:

将以前的myCom=new

Win_QextSerialPort(“COM1″,QextSerialBase::Polling);

更改为:myCom=new

Posix_QextSerialPort(“/dev/ttyS0″,QextSerialBase::Polling);

(这里一定要注意串口名称的写法。)

4.下面我们运行程序。

这时可能会出现以下提示。

Qt Creator 快速入门 选择题 霍亚飞版

1.以下关于QT的描述正确的是: a.是一个不跨平台的C++图形用户界面 b.由挪威TrollTech公司出品 c.只支持Unix、Linux d.QT API和开发工具对所支持的平台是不一致的2.以下关于QT的描述不正确的是: a.QT支持2D图形渲染 b.QT支持3D图形渲染 c.QT支持OpenGL d.QT不支持XML 3.下关于不正确的是: a.是面向嵌入式系统的Qt版本 b.是Qt的嵌入式窗口 c.基于Windows平台的开发工具 d.是完整的自包含C++ GUI的开发工具 4.内部对字符集的处理采用以下哪个标准: a.UNICODE b.ASCII c.GB2312 d.ISO 8859-1 5.以下关于Qt描述不正确的是 a.是基于面向对象的C++语言 b.提供了signal和slot的对象通信机制 c.有可查询和可设计属性 d.没有字符国际化 6.以下描述正确的是: a.标准的C++对象模型可有效的支持运行时参数 b.标准的C++对象模型的静态特性十分灵活 c.图形用户界面编程无需运行得高效 d.图形用户界面编程无需运行得高灵活性 7.以下不是QT增加的特性: a.有效的对象通信signal和slot b.可查询和可设计的对象 c.事件及事件过滤器 d.不使用指针 8.以下描述正确的是: a.元对象系统可以对信号使用模板 b.元对象系统可以对槽使用模板 c.Qt可在多个平台的应用程序中完全应用模板 d.Qt不能在多个平台的应用程序中完全应用模板9.以下关于moc叙述正确的是:

a.moc即Mult Object Compiler b.可产生能被任何标准C++编译访问的附加C++代码 c.moc必须手动调用 d.类声明中有无Q_OBJECT无所谓 10.以下关于信号和槽的描述正确的是: a.用于SOCKET网络通信 b.用于UDP网络通信 c.用于对象间通信 d.用于串口通信 11.以下关于信号/槽的叙述不正确的是: a.信号与槽通过connected函数任意相连 b.信号/槽机制在QObject类中实现 c.从QWidget类继承的所有类可以包含信号和槽 d.当对象状态变化时信号被发送,对象不关心是否有其他对象接收到该信 号 12.以下类声明中有几处错误? class M : public Qobject { public : M ( ) ; int value ( ) const { return va ; } public slot : void setValue ( int ) ; signals : void valueChanged ( int ) ; private: int va ; }; a. 5 b. 4 c. 3 d. 2 13.设有如下声明 void M : : setValue ( int v ) { if ( v != va ) { va = v ; emit valueChanged ( v ) ; } }

Qt开发入门教程02_QtE开发基础

QtE开发基础

?嵌入式GUI特点及种类 ?安装与建立QtE桌面运行环境?QtE Hello程序

?嵌入式GUI特点及种类 ?嵌入式系统对GUI的基本要求包括轻型、占用资源少、高性能、高可 靠性及可配置。 ?尽管实时嵌入式系统对GUI的需求越来越明显,但目前GUI的实现方法 各有不同,主要有以下几点: ?某些大型厂商有能力自己开发满足自身需要的GUI系统。 ?某些厂商没有将GUI作为一个软件层从应用程序中剥离,GUI的支 持逻辑由应用程序自己来负责。 ?采用某些比较成熟的GUI系统,比如MiniGUI,MicroWindows 或其他GUI系统。

?MiniGUI ?MiniGUI由原清华大学教师魏永明先生开发,是一种面向嵌入式系 统或实时系统的图形用户界面支持系统。它主要运行于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系 统上。

?MicroWindows ?MicroWindows是一个著名的开放源码的嵌入式GUI软件。它提供了 现代图形窗口系统的一些特性。MicroWindows API接口支持类 Win32API,接口试图和Win32完全兼容,而且还实现了一些Win32用户模块功能。

?Qt/Embedded ?Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界 面的工具包。Qt是挪威Trolltech软件公司的产品,它为各种系统提供图形用户界面的工具包,QtE就是Qt的嵌入式版本。 ?使用QtE,开发者可以: ?用QtE开发的应用程序要移植到不同平台时,只需要重新编译代 码,而不需要对代码进行修改。 ?可以随意设置程序界面的外观。 ?可以方便地为程序连接数据库。 ?可以使程序本地化。 ?可以将程序与Java集成。

Qt Creator快速入门期末试卷及答案 霍亚飞版

Qt复习提纲 Qt基础 1、以下关于QT的描述正确的是____B_____ A是一个不跨平台的C++图形用户界面 B由挪威TrollTech公司出品 C只支持Unix、Linux D QT API和开发工具对所支持的平台是不一致的 2、以下关于Qt描述不正确的是_____D__ A是基于面向对象的C++语言 B提供了signal和slot的对象通信机制 C有可查询和可设计属性 D没有字符国际化 3、以下不是QT增加的特性_____D___ A有效的对象通信signal和slot B可查询和可设计的对象 C事件及事件过滤器 D不使用指针 4、以下关于信号和槽的描述正确的是__C_____ A用于SOCKET网络通信 B用于UDP网络通信 C用于对象间通信 D用于串口通信 5、以下关于信号/槽的叙述不正确的是__B?______ A信号与槽通过connected函数任意相连 B信号/槽机制在QObject类中实现 C从QWidget类继承的所有类可以包含信号和槽 D当对象状态变化时信号被发送,对象不关心是否有其他对象接收到该信号 6、关于布局功能的叙述,以下正确的是____D____ A在布局空间中布置子窗口部件 B设置子窗口部件间的空隙 C管理在布局空间中布置子窗口部件 D以上都对 7、布局管理器包括____D____ A QHBox B QVBox C QGrid D 以上全有 8、以下叙述正确的是__D_______ A QHBox允许子窗口部件按水平、垂直和网格排列 B QVBox允许子窗口部件按水平、垂直和网格排列 C QGrid允许子窗口部件按水平、垂直和网格排列 D 以上全不对 9、创建一个窗体对象后,要想显示该窗体,需要调用对象的___show_______方法,要想隐藏该窗体需要调用对象的____hide______方法。

Qt-4.6动画Animation快速入门三字决

Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序。不必像以前的版本一样,所有的控件都枯燥的呆在伟大光荣的QLayout里,也许它们可以唱个歌,跳个舞。 前面写过一篇文章Qt动画效果的幕后英雄:QTimeLine,介绍了怎么利用QTimeLine写一动画程序。今天又再重申前文里的一句话,所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情。当然做这件事情,最好用的就是状态机,没错Qt-4.6.0提供了QStateMachine类,不过今天我要讲的三字决要简单一些。 第一决:QPropertyAnimation QPropertyAnimation用于和QObject中的属性properties进行通信,比如QWidget的大小,坐标等。来看代码 QPropertyAnimation *animation = new QPropertyAnimation(myWidget, "geometry"); animation->setDuration(10000); animation->setStartValue(QRect(0, 0, 100, 30)); animation->setEndValue(QRect(250, 250, 100, 30)); animation->start(); 第一行创建的QPropertyAnimation对象关联了myWidget这个窗体的几何属性。后面的几句分别设置了这个动画的时长,起始坐标和结束坐标。剩下的事情就交改QProperAnimation 去做就行了。然后调用start()启动它。没错,五行代码就完成了一个完成了一个自动从一个坐标点移动到另一个坐标点的窗体。下面我给出一个可以运行的代码,是一只小鸟从下角移到中间的一个小动画,当然你得自己准备这个同名的图片:) #include #include #include #include int m ain(int argc,char *argv[]){ QApplication app(argc,argv); QWidget *w=new QWidget(); w->resize(300,400); QPixmap birdimg=QPixmap("twitter-bird.png").scaled(40,40); QLabel *bird_1=new QLabel(w); bird_1->setPixmap(birdimg); QPropertyAnimation *anim1=new QPropertyAnimation(bird_1, "pos"); anim1->set Duration(2000);

Qt Creator 快速入门实验讲义(带目录)

《Qt Creator快速入门》第2版 实验讲义 2014年6月

目录 实验1 Qt开发环境的搭建......................................................- 2 - 目的与要求..................................................................................................................- 2 - 实验准备......................................................................................................................- 2 - 实验内容......................................................................................................................- 2 - 实验2 编译和发布Qt程序...................................................- 16 - 目的与要求................................................................................................................- 16 - 实验准备....................................................................................................................- 16 - 实验内容....................................................................................................................- 16 - 实验3 使用Qt资源文件.......................................................- 25 - 目的与要求................................................................................................................- 25 - 实验准备....................................................................................................................- 25 - 实验内容....................................................................................................................- 25 - 实验4 创建登陆对话框..........................................................- 30 - 目的与要求................................................................................................................- 30 - 实验准备....................................................................................................................- 30 - 实验内容....................................................................................................................- 30 - 实验5 定时器和随机数..........................................................- 35 - 目的与要求................................................................................................................- 35 - 实验准备....................................................................................................................- 35 - 实验内容....................................................................................................................- 35 - 实验6 编译MySQL数据库驱动............................................- 38 - 目的与要求................................................................................................................- 38 - 实验准备....................................................................................................................- 38 - 实验内容....................................................................................................................- 38 - 实验7 数据库基本操作............................................................- 49 - 目的与要求................................................................................................................- 49 - 实验准备....................................................................................................................- 49 - 实验内容....................................................................................................................- 49 - 实验8 Qt数据库应用编程(综合设计)................................- 55 - 目的与要求................................................................................................................- 55 - 实验准备....................................................................................................................- 55 - 实验内容....................................................................................................................- 55 -

Qt入门教程第01章QtCreator的安装与最简单程序的编写

第01章Qt Creator的安装和hello world程序 第1章主要讲述windows下的Qt Creator下载、安装和最简单程序的编写,然后在附录里又讲解了两种其他的编写程序的方法。在linux下Qt Creator下载、安装及程序的编写基本与此相同。 1.1 Qt 简介 Qt 是一个跨平台的C++ 图形用户界面库,由挪威TrollTech 公司出品,目前包括Qt,基于Framebuffer 的Qt Embedded,快速开发工具Qt Designer,国际化工具Qt Linguist 等部分Qt 支持所有Unix 系统,当然也包括Linux,还支持WinNT/Win2k,Win95/98 平台。 Qt 具有下列优点: 1.优良的跨平台特性: Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux,Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD,BSD/OS, SCO, AIX, OS390,QNX 等等。 2.面向对象 Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件之间的协同工作变得十分简单。 3.丰富的 API Qt 包括多达 250 个以上的 C++ 类,还替供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。 甚至还包括正则表达式的处理功能。 4.支持 2D/3D 图形渲染,支持 OpenGL 5.大量的开发文档 6.XML 支持 1.2 Qt Creator的下载和安装 1. 下载 首先到Qt的官方网站上下载Qt Creator,这里我们下载windows版的。 Qt SDK: 完整的开发环境 Qt SDK 在一个单独的安装程序内包括了使用 Qt 构建跨平 台应用程序所需的工具。 ?Qt 库 4.7.0

Qt Creator 快速入门期末考试试卷及答案

一、选择题(每题2分,共15题,30分) 1.以下关于QT的描述正确的是:B a.是一个不跨平台的C++图形用户界面 b.由挪威TrollTech公司出品 c.只支持Unix、Linux d.QT API和开发工具对所支持的平台是不一致的 1.内部对字符集的处理采用以下哪个标准:A a.UNICODE b.ASCII c.GB2312 d.ISO 8859-1 2.以下描述正确的是:A a.标准的C++对象模型可有效的支持运行时参数 b.标准的C++对象模型的静态特性十分灵活 c.图形用户界面编程无需运行得高效 d.图形用户界面编程无需运行得高灵活性 3.以下不是QT增加的特性:D a.有效的对象通信signal和slot b.可查询和可设计的对象 c.事件及事件过滤器 d.不使用指针 4.以下描述正确的是:C a.元对象系统可以对信号使用模板 b.元对象系统可以对槽使用模板 c.Qt可在多个平台的应用程序中完全应用模板 d.Qt不能在多个平台的应用程序中完全应用模板 5.以下关于moc叙述正确的是:B a.moc即Mult Object Compiler b.可产生能被任何标准C++编译访问的附加C++代码 c.moc必须手动调用 d.类声明中有无Q_OBJECT无所谓 6.以下关于信号/槽的叙述不正确的是:D a.信号与槽通过connected函数任意相连 b.信号/槽机制在QObject类中实现 c.从QWidget类继承的所有类可以包含信号和槽 d.当对象状态变化时信号被发送,对象不关心是否有其他对象接收到该信 号 7.设有如下声明B void M : : setValue ( int v ) { if ( v != va ) { va = v ;

Qt Designer快速入门

几行代码轻松做上位机界面Qt Designer快速入门小教程 By Exilefox 2012年3月28日 做嵌入式的各位想必或多或少都听说过Qt,各种优点不细数了,简单的说这就是个做界面的IDE。 我发现很多Qt的教程都是用代码来编写界面程序,有没有图形化的方法呢!答案就是Qt Designer 打个比方,用代码写界面就像是你用记事本一行行的敲HTML代码,用Qt Designer 写界面就很类似用FrontPage或者DreamWeaver,拖些控件,调整一下位置、属性,补些css 效果,一个轻松的页面就出来了 此文意在引导初学者使用Qt Designer快速的入门编写界面,不关心底层的c++实现,总共只用敲几行代码 新建工程开始,如图选择,然后一路next。我就不多说了

工程建立好后来看看工程的结构 点击ui文件就可以切换到设计窗口,我们的ui设计主要就是在这里完成的,让我们看看结构 在左边的是控件栏,里面的控件(如我们将用到的按钮、框架等)可以直接拖拽到中间的窗口编辑区。各位有兴趣可以自己把他们一一拖出来,然后按shift+alt+R预览,看看是做什么功能的,我就不一一详述了(其实有些我也没用过,呵呵)。因为我们再之前建立工程时候默认的是Mainwindow类型,所以这个窗口一开始就自带了顶部菜单,顶部图标栏,底部状态栏等,各位想要干净点的可以在创建时试试其他类型。右上的显示的是从属结构,右下显示的是某个部件的属性。底部的是信号与槽编辑窗口,信号与槽的编辑方式有4种:拖拽、在编辑窗口添加,右键“转到槽”,在C++代码中用connect函数,在此只演示右键“转到槽”

相关主题