软件学院 刘豪 - PowerPoint PPT Presentation

slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
软件学院 刘豪 PowerPoint Presentation
Download Presentation
软件学院 刘豪

play fullscreen
1 / 59
软件学院 刘豪
190 Views
Download Presentation
cornell-boyle
Download Presentation

软件学院 刘豪

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. 软件学院 刘豪 简单QT演示

  2. 任务1. 实现简单Qt程序 任务2. 交叉编译简单Qt程序,并在开发板上运行 任务

  3. 任务1. 实现简单Qt程序

  4. 以下是使用 Qt Creator 进行开发的总体步骤。通过 Hello 实例来简单介绍用 Qt Creator 开发程序的基本过程。

  5. 运行 Qt Creator,选择菜单栏中的“文件”选项,然后选择“新建文件或项目”,出现“项目类型”选择窗口,如图 1 所示,单击左上角的“项目”选项框中的“Qt 控件项目”,然后选择右上角选项框中的“Qt Gui 应用”。 1).新建项目

  6. 项目创建完毕后,开始设计窗体。Qt Creator 创建项目自带的 Main Window 主窗体默认是包含: 一个QMenuBar、 一个Hello 程序界面设计结果 QToolBar 和 一个 QStatusBar, Hello 实例用不到这些控件,可以在窗体中删除这些自带控件 2)设计窗体

  7. Hello程序设计结果

  8. 界面设计完毕之后,需要实现其功能:当单击“OK”按钮时,“TextLabel”变为“Hello World”。此时需要将对应的信号和槽函数连接,Qt Creator 提供了三种建立信号和槽的方法。 3)建立信号和槽的映射

  9. 第一种方法,自己定义槽函数和映射。

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

  11. 第二种方法,右击“OK”按钮,选择“转到槽”选项,选择信号“clicked()”,单击“确定”按钮。系统自动生成槽函数的声明和定义,并建立内部映射,只须在槽函数体内编写槽函数的功能即可,添加语句参考第一种方法中的步骤 2。 任务

  12. 第三种方法,右击界面选择“改变信号/槽”选项,单击“+”添加新的槽函数,单击“确定”按钮完成槽函数的添加。在窗体编辑区的下方有信号和槽的映射窗口,单击左上角的加号,出现一行新的映射,在这里进行映射的编辑。最后重复第一种方法中的步骤 1 和步骤 2 完成槽函数的声明及定义。

  13. Hello程序加载界面

  14. Hello程序单击OK按钮后的结果

  15. #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 代码如下

  16. #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

  17. #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

  18. <QApplication>是QApplication类定义的头文件,一般类名与头文件名相同;<QApplication>是QApplication类定义的头文件,一般类名与头文件名相同; 创建QApplication对象 app,并将用户在控制台输入的参数传递给app;(有且只有一个QApplitation对象) 使用GUI的应用程序,都必须包含一个QApplication对象; 该对象GUI应用程序的控制流程和主要的设置选项; 在堆中创建MainWindow对象 , MainWindow是一个类QMainWindow的派生类,显示程序界面; MainWindow对象创建时不显示 ,调用show()才显示; 最后程序返回Qt应用程序对象app的执行结果; QApplication::exec()函数将QT GUI程序进入一个主事件循环,主循环开始后,接收事件(如鼠标点击等)并向相应的窗口进行分发和处理; 程序分析:

  19. Qt编程基础 Qt工具 Qt开发程序方法 Qt的类库介绍 Qt creator集成开发环境 26 www.embedu.org

  20. 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

  21. Qt开发程序方法 Qt库是一个C++类库,类名都已”Q”开头,使用Qt库开发应用程序,主要有以下两种方式: 程序中直接使用Qt库中定义好的类; 继承Qt库中的类来定义派生类,通过实现派生类来对原有类进行改造。 如自定义一个对话框: 28 www.embedu.org

  22. 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

  23. 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

  24. Qt的类库介绍 Qt的类派生图 31 www.embedu.org

  25. Qt的类库介绍 Qt类库非常庞大,将Qt类分成各个模块,每个模块对应一个库文件,如下: 32 www.embedu.org

  26. Qt的类库介绍 基本库QtCore 基本数据类型,例如:QString、QByteArray 基本数据结构,例如:QList、QVector、QHash 输入输出类,例如:QIODevice、QTextStream、QFile 多线程编程用到的类,例如:QThread、QWaitCondition QObject与QCoreApplication 33 www.embedu.org

  27. Qt的类库介绍 GUI库QtGui QWidget类,以及由它派生出来的类,例如:QLabel、QPushButton 布局类,例如:QVBoxLayout、QHBoxLayout、QGridLayout 主窗口类,QMainWindow、QMenu 绘图类,例如:QPainter、QPen、QBrush 提供准备好使用的(ready-to-use)对话框类,例如:QFileDialog、QPrintDialog 应用程序类QApplication 34 www.embedu.org

  28. Qt的类库介绍 网络库QtNetwork QTcpSocket QUdpSocket QHttp QFtp OpenGL库QtOpenGL QGLWidget Database库QtSql XML库QtXml 兼容库Qt3Support 35 www.embedu.org

  29. Qt creator集成开发环境 Qt Creator 包括项目生成向导、高级的 C++ 代码编辑器、浏览文件及类的工具、集成了 Qt Designer、图形化的 GDB 调试前端,集成qmake 工具等功能,包括: 智能代码编辑器 Qt4项目生成向导 整合了Qt帮助 集成了Qt designer 定位器 支持qmake的生成.pro文件 调试接口 36 www.embedu.org

  30. Qt creator集成开发环境 Qt Creator介绍 Qt Creator的6个模式:欢迎,编辑,调试,项目,帮助和输出。 编辑模式: 1)project项目树 上边条:项目树滤器,与代码编辑器同步,分裂。 37 www.embedu.org

  31. Qt creator集成开发环境 (2)代码编辑的上边条: 打开的文件 符号选择(函数名) (3)下边条: 4个output窗口:编译提示,查找结果, 程序运行output, 编译output (4)Qt designer 在qt creator中双击ui文件,启动qt designer 38 www.embedu.org

  32. Qt creator集成开发环境 Qt designer包括如下几部分 1)标准窗口部件 左侧,分类列出QT标准窗口部件;可以从中拖放到主窗口中; 2)对象监测器 列出了界面的所有窗口部件,以及各窗口部件的父子关系 3)属性编辑器 列出了选中部件的可编辑属性 4)动作编辑器 5)信号与槽编辑器 6)上边条 部件编辑模式选择 Widget编辑模式,信号与槽编辑模式,伙伴编辑模式,Tab编辑模式。 布局工具栏 39 www.embedu.org

  33. Qt creator集成开发环境 Debug模式 进入Debug模式可以调试程序;设置断点,查看变量等; project模式 主要是配置项目的环境,工具等。默认情况下,创建了release和debug两个project; 可以针对交叉编译添加一个project设置,设置交叉编译project; Help模式 进入Qt 助手 Output模式 输出模式 40 www.embedu.org

  34. Qt creator集成开发环境 41 www.embedu.org

  35. Qt creator集成开发环境 使用Qt Creator向导创建项目 1、File->new 弹出向导; 2、选择:Qt4 Gui Application; 3、输入项目名和项目保存路径; 42 www.embedu.org

  36. Qt creator集成开发环境 4、选择项目需要的模块,默认包括QtCore, QtGui 5、选择主窗口的基类和自定义部件类的名字; 6、单击下一步,完成向导进入编辑模式; 43 www.embedu.org

  37. Qt creator集成开发环境 7、双击右边的ui文件,启动qt designer,拖放右边的常用控件到主窗口,编辑界面; 44 www.embedu.org

  38. Qt creator集成开发环境 8、点击编译按钮,编译程序;(从上之下分别是:运行,调试,编译) 45 www.embedu.org

  39. Qt 核心机制 Qt 信号与槽 46 www.embedu.org

  40. Qt 信号与槽机制 信号 当某个特定的事件发生时,对应的部件会发出一个信号,与其相关联的槽将被立刻执行; Qt的每个窗口部件(Qt类)已经定义了大部信号,我们可以在其派生类中定义特有的信号; 信号与函数原型相同,但信号没有定义,而在头文件中给出信号的说明 class MyDialog:public QDialog //继承 { Q_OBJECT signals: void mySingals(); //永远是void,可带形参 private: QPushButton closeButton; //直接使用 …… }; 信号的发送:emit(mySignals()); 47 www.embedu.org

  41. Qt 信号与槽机制 槽 槽是类的成员函数,与普通的成员函数不同的是,槽函数能够与信号进行关联,也可以被直接调用; 槽函数与类的普通成员一样,有访问权限(public,private,protected); public属性的槽函数能够与所有类对象的信号关联, private属性的槽函数只能与本类对象的信号关联, protected属性的槽函数能够与本类及其派生类对象的信号相关联; 如在自定义类中添加槽: …… public slots: Void mySlots(); …… 槽函数与信号不同之处是,槽函数要有定义。 48 www.embedu.org

  42. 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

  43. Qt 信号与槽机制 自动关联 Qt提供了信号与槽的自动关联功能,对于Qt窗口部件提供的已有信号,如果能够按下面的规则命名槽函数,那么Qt就能够自动进行关联: void on_<窗口部件名>_<信号名>(<参数>); 50 www.embedu.org