590 likes | 813 Views
软件学院 刘豪. 简单 QT 演示. 任务 1. 实现简单 Qt 程序 任务 2. 交叉编译简单 Qt 程序,并在开发板上运行. 任务. 任务 1. 实现简单 Qt 程序. 以下是使用 Qt Creator 进行开发的总体步骤。通过 Hello 实例来简单介绍用 Qt Creator 开发程序的基本过程。. 运行 Qt Creator ,选择菜单栏中的“文件”选项,然后选择“新建文件或项目”,出现“项目类型”选择窗口,如图 1 所示,单击左上角的“项目”选项框中的“ Qt 控件项目”,然后选择右上角选项框中的“ Qt Gui 应用”。.
E N D
软件学院 刘豪 简单QT演示
任务1. 实现简单Qt程序 任务2. 交叉编译简单Qt程序,并在开发板上运行 任务
以下是使用 Qt Creator 进行开发的总体步骤。通过 Hello 实例来简单介绍用 Qt Creator 开发程序的基本过程。
运行 Qt Creator,选择菜单栏中的“文件”选项,然后选择“新建文件或项目”,出现“项目类型”选择窗口,如图 1 所示,单击左上角的“项目”选项框中的“Qt 控件项目”,然后选择右上角选项框中的“Qt Gui 应用”。 1).新建项目
项目创建完毕后,开始设计窗体。Qt Creator 创建项目自带的 Main Window 主窗体默认是包含: 一个QMenuBar、 一个Hello 程序界面设计结果 QToolBar 和 一个 QStatusBar, Hello 实例用不到这些控件,可以在窗体中删除这些自带控件 2)设计窗体
界面设计完毕之后,需要实现其功能:当单击“OK”按钮时,“TextLabel”变为“Hello World”。此时需要将对应的信号和槽函数连接,Qt Creator 提供了三种建立信号和槽的方法。 3)建立信号和槽的映射
1)在文件 mainwindow.h 的类 MainWindow 的定义中声明槽函数,代码如下: 1. public slots: 2. void on_pushButton_clicked(); 2)定义槽函数体在 mainwindow.cpp 文件中,代码如下: 1. void MainWindow:: on_pushButton_clicked () 2. { 3. ui->label->setText("Hello World"); 4. } 3)建立映射,在类 MainWindow 的构造函数中添加如下语句,以便将信号和槽函数进行连接: 1. connect(ui->pushbutton,SIGNAL(clicked()),this,SLOT(on_pushBu tton_clicked()));
第三种方法,右击界面选择“改变信号/槽”选项,单击“+”添加新的槽函数,单击“确定”按钮完成槽函数的添加。在窗体编辑区的下方有信号和槽的映射窗口,单击左上角的加号,出现一行新的映射,在这里进行映射的编辑。最后重复第一种方法中的步骤 1 和步骤 2 完成槽函数的声明及定义。
任 Hello程序单击OK按钮后的结果
#include <QtGui/QApplication> #include "mainwindow.h“ int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } Main.cpp 代码如下
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H MainWindow.h
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } oid MainWindow::on_pushButton_clicked() { ui->label->setText("Hello World"); } MainWindow.cpp
<QApplication>是QApplication类定义的头文件,一般类名与头文件名相同;<QApplication>是QApplication类定义的头文件,一般类名与头文件名相同; 创建QApplication对象 app,并将用户在控制台输入的参数传递给app;(有且只有一个QApplitation对象) 使用GUI的应用程序,都必须包含一个QApplication对象; 该对象GUI应用程序的控制流程和主要的设置选项; 在堆中创建MainWindow对象 , MainWindow是一个类QMainWindow的派生类,显示程序界面; MainWindow对象创建时不显示 ,调用show()才显示; 最后程序返回Qt应用程序对象app的执行结果; QApplication::exec()函数将QT GUI程序进入一个主事件循环,主循环开始后,接收事件(如鼠标点击等)并向相应的窗口进行分发和处理; 程序分析:
Qt编程基础 Qt工具 Qt开发程序方法 Qt的类库介绍 Qt creator集成开发环境 26 www.embedu.org
Qt工具 designer Qt designer是一个界面设计工具,使开发者可视化设计用户界面。设计的界面保持为XML格式的”.ui”文件。 qmake、uic、moc qmake为编译Qt/E库和应用提供的Makefile生成器,能根据工程文件(.pro)产生不同平台下Makefile uic 将使用designer设计的”.ui”文件转换成源程序文件。 moc(源对象编译器),将Qt的源程序转为标准C++程序。 Qt助手 Qt翻译工具 27 www.embedu.org
Qt开发程序方法 Qt库是一个C++类库,类名都已”Q”开头,使用Qt库开发应用程序,主要有以下两种方式: 程序中直接使用Qt库中定义好的类; 继承Qt库中的类来定义派生类,通过实现派生类来对原有类进行改造。 如自定义一个对话框: 28 www.embedu.org
Qt开发程序方法 Qt 程序的main()函数 main()函数是程序的入口函数,其基本形式如下: int main(int argc,char** argv) { QApplication app(argc,argv); MyDialog w; w.show(); //显示窗口 return app.exec()//进入主事件循环 } QApplication类管理Qt GUI程序的控制流和主要设置,包含一个主事件循环,从操作系统或者其他资源发送到本GUI进程的事件都要经过QApplication的事件循环进行处理和转发。 29 www.embedu.org
Qt开发程序方法 编译Qt程序 qmake -project (生成工程文件) 工程文件是一个”.pro”文件,内容如下: TEMPLATE = app //本项目是应用程序工程 TARGET = //可执行文件的名字 DEPENDPATH += . //依赖的其他文件所在的路径 INCLUDEPATH += . //编译时,需要搜索的头文件路径 # Input HEADERS += mydialog.h //程序头文件 SOURCES += main.cpp mydialog.cpp //程序源文件 sSOURCES += main.cpp qmake (生成Makefile) make (编译工程) 30 www.embedu.org
Qt的类库介绍 Qt的类派生图 31 www.embedu.org
Qt的类库介绍 Qt类库非常庞大,将Qt类分成各个模块,每个模块对应一个库文件,如下: 32 www.embedu.org
Qt的类库介绍 基本库QtCore 基本数据类型,例如:QString、QByteArray 基本数据结构,例如:QList、QVector、QHash 输入输出类,例如:QIODevice、QTextStream、QFile 多线程编程用到的类,例如:QThread、QWaitCondition QObject与QCoreApplication 33 www.embedu.org
Qt的类库介绍 GUI库QtGui QWidget类,以及由它派生出来的类,例如:QLabel、QPushButton 布局类,例如:QVBoxLayout、QHBoxLayout、QGridLayout 主窗口类,QMainWindow、QMenu 绘图类,例如:QPainter、QPen、QBrush 提供准备好使用的(ready-to-use)对话框类,例如:QFileDialog、QPrintDialog 应用程序类QApplication 34 www.embedu.org
Qt的类库介绍 网络库QtNetwork QTcpSocket QUdpSocket QHttp QFtp OpenGL库QtOpenGL QGLWidget Database库QtSql XML库QtXml 兼容库Qt3Support 35 www.embedu.org
Qt creator集成开发环境 Qt Creator 包括项目生成向导、高级的 C++ 代码编辑器、浏览文件及类的工具、集成了 Qt Designer、图形化的 GDB 调试前端,集成qmake 工具等功能,包括: 智能代码编辑器 Qt4项目生成向导 整合了Qt帮助 集成了Qt designer 定位器 支持qmake的生成.pro文件 调试接口 36 www.embedu.org
Qt creator集成开发环境 Qt Creator介绍 Qt Creator的6个模式:欢迎,编辑,调试,项目,帮助和输出。 编辑模式: 1)project项目树 上边条:项目树滤器,与代码编辑器同步,分裂。 37 www.embedu.org
Qt creator集成开发环境 (2)代码编辑的上边条: 打开的文件 符号选择(函数名) (3)下边条: 4个output窗口:编译提示,查找结果, 程序运行output, 编译output (4)Qt designer 在qt creator中双击ui文件,启动qt designer 38 www.embedu.org
Qt creator集成开发环境 Qt designer包括如下几部分 1)标准窗口部件 左侧,分类列出QT标准窗口部件;可以从中拖放到主窗口中; 2)对象监测器 列出了界面的所有窗口部件,以及各窗口部件的父子关系 3)属性编辑器 列出了选中部件的可编辑属性 4)动作编辑器 5)信号与槽编辑器 6)上边条 部件编辑模式选择 Widget编辑模式,信号与槽编辑模式,伙伴编辑模式,Tab编辑模式。 布局工具栏 39 www.embedu.org
Qt creator集成开发环境 Debug模式 进入Debug模式可以调试程序;设置断点,查看变量等; project模式 主要是配置项目的环境,工具等。默认情况下,创建了release和debug两个project; 可以针对交叉编译添加一个project设置,设置交叉编译project; Help模式 进入Qt 助手 Output模式 输出模式 40 www.embedu.org
Qt creator集成开发环境 41 www.embedu.org
Qt creator集成开发环境 使用Qt Creator向导创建项目 1、File->new 弹出向导; 2、选择:Qt4 Gui Application; 3、输入项目名和项目保存路径; 42 www.embedu.org
Qt creator集成开发环境 4、选择项目需要的模块,默认包括QtCore, QtGui 5、选择主窗口的基类和自定义部件类的名字; 6、单击下一步,完成向导进入编辑模式; 43 www.embedu.org
Qt creator集成开发环境 7、双击右边的ui文件,启动qt designer,拖放右边的常用控件到主窗口,编辑界面; 44 www.embedu.org
Qt creator集成开发环境 8、点击编译按钮,编译程序;(从上之下分别是:运行,调试,编译) 45 www.embedu.org
Qt 核心机制 Qt 信号与槽 46 www.embedu.org
Qt 信号与槽机制 信号 当某个特定的事件发生时,对应的部件会发出一个信号,与其相关联的槽将被立刻执行; Qt的每个窗口部件(Qt类)已经定义了大部信号,我们可以在其派生类中定义特有的信号; 信号与函数原型相同,但信号没有定义,而在头文件中给出信号的说明 class MyDialog:public QDialog //继承 { Q_OBJECT signals: void mySingals(); //永远是void,可带形参 private: QPushButton closeButton; //直接使用 …… }; 信号的发送:emit(mySignals()); 47 www.embedu.org
Qt 信号与槽机制 槽 槽是类的成员函数,与普通的成员函数不同的是,槽函数能够与信号进行关联,也可以被直接调用; 槽函数与类的普通成员一样,有访问权限(public,private,protected); public属性的槽函数能够与所有类对象的信号关联, private属性的槽函数只能与本类对象的信号关联, protected属性的槽函数能够与本类及其派生类对象的信号相关联; 如在自定义类中添加槽: …… public slots: Void mySlots(); …… 槽函数与信号不同之处是,槽函数要有定义。 48 www.embedu.org
Qt 信号与槽机制 关联 Qt对象之间要实现信号与槽的通信,必须对信号与槽进行关联 信号与槽函数的关联使用connect()函数,其函数原型如下; bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) [static] sender 发送信号的部件 signal发送的信号 receiver 接收信号的部件 nember是接收部件的槽函数 49 www.embedu.org
Qt 信号与槽机制 自动关联 Qt提供了信号与槽的自动关联功能,对于Qt窗口部件提供的已有信号,如果能够按下面的规则命名槽函数,那么Qt就能够自动进行关联: void on_<窗口部件名>_<信号名>(<参数>); 50 www.embedu.org