搜档网
当前位置:搜档网 › Qt教程

Qt教程

Qt教程
Qt教程

GUI简介

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户接口。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。

1.1 MFC

微软基础类库(Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

MFC的主要优点是可以用面向对象的方法来调用Windows API,以及应用程序开发的便捷。MFC将很多应用程序开发中常用的功能自动化,并且提供了文档框架视图结构和活动文档这样的便于自定义的应用程序框架。

缺点:虽然MFC的源代码对用户是完全开放的,但是MFC的一些封装过程过于复杂,以致于新用户很难迅速掌握MFC的应用程序框架,以及在调试中定位问题的位置。

https://www.sodocs.net/doc/ab12623394.html,/zh-CN/vstudio/

参考书:《VC++深入详解》,孙鑫。

1.2 wxWidgets

wxWidgets is a C++ library that lets developers create applications for Windows, Mac OS X, Linux and UNIX on 32-bit and 64-bit architectures as well as several mobile platforms including Windows Mobile, iPhone SDK and embedded GTK+.

https://www.sodocs.net/doc/ab12623394.html,/about/screensh.htm

1.3 MiniGUI

MiniGUI is one of the world famous free software projects. MiniGUI aims to provide

a lightweight graphics user interface (GUI) support system for real-time embedded systems. Since the first release under the GPL license at the beginning of 1999, MiniGUI has been widely used in handheld terminals (mobile phones and PDAs), set

top boxes, industry control systems, industry instruments, portable media players, and

so on.

MiniGUI has become a cross-operating-system GUI system; it can run on Linux/uClinux, eCos, VxWorks, pSOS, ThreadX, Nucleus, and even uC/OS-II; The hardware platforms tested include Intel x86, ARM (ARM7/ARM9/StrongARM/xScale), PowerPC, MIPS, BlackFin, DragonBall, and ColdFire.

At present, the latest GPL version of MiniGUI is 1.6.10. This version provides support for Linux/uClinux and eCos operating systems.

The following figure are the MiniGUI-based application interfaces for a WiFi phone. This device is based on the eCos operating system.

https://www.sodocs.net/doc/ab12623394.html,/en/introduction/application/

1.4 μC/GUI

μC/GUI is universal graphical software for embedded applications that provides an efficient processor and LCD controller-independent GUI to applications using a graphical LCD. Designed for single and multi-task environments, μC/GUI is adaptable to nearly any size physical or virtual display with an LCD controller and CPU, and is delivered with all source code.

μC/GUI is compatible with nearly all CPUs and, unlike other GUIs that require a C++ compiler, μC/GUI is written entirely in ANSI-C. Processors ranging from 8- to 32-bits

run μC/GUI. 16-bit CPUs (or better) achieve optimal performance.

https://www.sodocs.net/doc/ab12623394.html,/rtos/ucgui/overview/

1.5 Qt

●参考书:《C++GUI Qt4编程(第2版)》,布兰切特(Jasmin Blanchette) (作

者), 萨默菲尔德 (Mark Summerfield) (作者), 闫锋欣(译者), 曾泉人

(译者), 张志强(译者)

●https://www.sodocs.net/doc/ab12623394.html,/

一、Qt与Qt Creator介绍

1.1 Qt与Qt Creator简介

Qt 是一个跨平台应用程序和UI 开发框架。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

Qt Creator 是全新的跨平台 Qt IDE,可单独使用,也可与 Qt 库和开发工具组成一套完整的SDK。其中包括:高级C++代码编辑器,项目和生成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理和浏览工具。

1.2 Qt的历史

●1996年Qt上市

●Qt 已成为数以万计商业和开源应用程序的基础

●Qt 的软件授权机制具有经受市场检验的双重授权(开源与商业)模式

●Qt Software 的前身为Trolltech(奇趣科技)。 Trolltech(奇趣科技)始

创于1994年

●Trolltech(奇趣科技)于2008年6月被 Nokia 收购,加速了其跨平台开

发战略

1.3 Qt所支持的平台

嵌入式 Linux (Embedded Linux)

Qt for Embedded Linux? 是用于嵌入式 Linux的应用程序架构。Qt 可以在任何支持 Linux 的平台上运行。Qt 的直观 API,让您只须少数几行代码便可以更短的时间实现更高端的功能。

特点:1. 用于Linux 的紧凑的视窗系统;2. 用于广泛的处理器;3. 移植桌面代码至嵌入式平台,或通过重新编译,反之亦然;4. 编译移除不常使用的组件与功能;5. 利用系统资源并实现本地化性能;6. 开发嵌入式设备犹如开发桌面系统一样轻松简单。

基本要求:

开发环境:Linux 内核 2.4 或更高;GCC 版本 3.3 或更高;用于 MIPS? GCC 版本 3.4 或更高。

占用存储空间:存储空间取决于配置,压缩后: 1.7 – 4.1 MB,未压缩: 3.6 – 9.0 MB 。

硬件平台:易于载入任何支持带 C++ 编译器和帧缓冲器驱动 Linux 的处理器。支持ARM?, x86?, MIPS?, PowerPC? 。

1.4 Qt类库

模块化 Qt C++ 类库提供一套丰富的应用程序生成块 (block),包含了生成高级跨平台应用程序所需的全部功能。

1.5 Qt Quick介绍

Qt Quick是在Qt 4.7中被引进的一项技术。Qt Quick 是一种高级用户界面技术,开发人员和设计人员可用它协同创建动画触摸式用户界面和应用程序。它由三部分构成:1.QML:像 JavaScript 一样的声明式语言;2. Qt Creator:在 Qt IDE中的直观工具;3. Qt Declarative:强大的 C++ 模块。

二、Qt Creator的安装和Hello world程序的编写

1.首先到Qt的官方网站上下载windows版的Qt Creator。下载地址:https://www.sodocs.net/doc/ab12623394.html,/Try-Qt-Now/,Qt_SDK_Win_offline_v1_1_2_en.exe (1.8GB)

下载完成后,直接安装即可,安装过程中按默认设置即可。

2.运行Qt Creator,首先弹出的是欢迎界面,可以打开其自带的各种演示程序。

3.点击创建项目来新建工程。

5.下面输入工程名和保存路径。这里的工程名为helloworld。

6.在目标设置中选择桌面,然后点击下一步。

7.在类信息中基类选择为QDialog对话框类,然后点击下一步。

8.点击完成,完成工程的建立。

9.可以看见工程中的所有文件都出现在列表中了。可以直接点击下面的绿色的run按钮或者按下Ctrl+R快捷键运行程序。

10.程序运行会出现空白的对话框,如下图。

11.双击文件列表的dialog.ui文件,出现下图所示的图形界面编辑界面。

12.在左下角的 Display widgets 控件栏里找到Label,按着鼠标左键将其拖到设计窗口上,如下图。

14.双击它,并将其内容改为hello world,在右下角的属性栏里将字体改为Time New Roman,大小改为15。

16.拖动标签一角的蓝点,将全部文字显示出来。

17.按Ctrl+s保存dialog.ui,再次按下运行按钮,便会出现hello world。

到这里hello world程序便完成了。

Qt Creator编译程序,会在工程路径中生成一个helloworld-build-desktop文件夹,里面的debug文件里有.exe可执行文件。但Qt Creator默认是动态链接的,就是可执行文件在运行时需要相应的.dll文件。点击生成的.exe文件,可能显示“没有找到libgcc_s_dw2-1.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”表示缺少该dll文件。

解决这个问题可以将D:\QtSDK\Desktop\Qt\4.7.3\mingw\bin加入系统Path环境变量。右击我的电脑->属性->高级->环境变量->在系统变量列表中找到Path,将路径加入其中即可。

三、用纯代码编写Hello world

实现原理:

1. QApplication Class

The QApplication class manages the GUI application's control flow and main settings.

2. int QApplication::exec () [static]

Enters the main event loop and waits until exit() is called, then returns the value that was set to exit() (which is 0 if exit() is called via quit()).

It is necessary to call this function to start event handling. The main event loop receives events from the window system and dispatches these to the application widgets.

Generally, no user interaction can take place before calling exec(). As a special case, modal widgets like QMessageBox can be used before calling exec(), because modal widgets call exec() to start a local event loop.

3. void QWidget::show () [slot]

Shows the widget and its child widgets. This function is equivalent to setVisible(true).

4. text : QString

This property holds the label's text.

Access functions:

QString text () const

void setText ( const QString & )

5. size : QSize

This property holds the size of the widget excluding any window frame.

Access functions:

void resize ( int w, int h )

void resize ( const QSize & )

6. geometry : QRect

This property holds the geometry of the widget relative to its parent and excluding the window frame.

Access functions:

void setGeometry ( int x, int y, int w, int h )

void setGeometry ( const QRect & )

7. void QFont::setFamily ( const QString & family )

Sets the family name of the font. The name is case insensitive and may include a foundry name.

8. void QFont::setPointSize ( int pointSize )

Sets the point size to pointSize. The point size must be greater than zero.

9. font : QFont

This property holds the font currently set for the widget.

Access functions:

const QFont & font () const

void setFont (const QFont &)

实现过程:

1.新建空的Qt工程。

2.工程名为helloworld_src,并选择保存路径(提示:路径中不能有中文)。然后在目标设置中选择桌面,点击下一步,然后点击完成。

3.在新建好的工程中添加文件。右击工程文件夹,在弹出的菜单中选择添加新文件。

4.选择C++源文件。

5.文件名为main.cpp,点击下一步。

6.这里自动将这个文件添加到了新建的工程中。保持默认设置,点击完成。

7.在main.cpp文件中添加代码。

#include

int main(int argc, char* argv[])

{

QApplication app(argc, argv);

return app.exec();

}

8.这时点击运行,程序执行了,但看不到效果,因为程序里什么也没做。点击应用程序输出窗口中的红色方块,停止运行。

9.更改代码。添加一个对话框对象。

#include

int main(int argc, char* argv[])

{

QApplication app(argc, argv);

QDialog * dd =new QDialog();

dd -> show();

return app.exec();

}

10.运行效果如下。

11.更改代码如下,在对话框上添加一个标签对象,并显示hello world。#include

int main(int argc, char* argv[])

{

argv);

QApplication

app(argc,

QDialog* dd = new QDialog();

QLabel * label = new QLabel(dd);

label -> setText("hello world");

dd -> show();

app.exec();

return

}

12.运行效果如下。

13. 更改代码如下,修改Label及字体设置,并显示Hello world如下。

#include

int main(int argc, char* argv[])

{

QApplication app(argc, argv);

QDialog* dd =new QDialog();

QLabel * label = new QLabel(dd);

label -> setText("Hello world");

dd->resize(400, 300);

label->setGeometry(QRect(170, 130, 111, 31));

QFont font;

font.setFamily(QString::fromUtf8("Times New Roman"));

font.setPointSize(15);

label->setFont(font);

dd -> show();

return app.exec();

}

四、编写多窗口程序

实现功能:

程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。

实现原理:

1.信号和槽(Signals and Slots)

Signals and slots are used for communication between objects. In GUI programming, when we change one widget, we often want another widget to be notified. For example, if a user clicks a Close button, we probably want the window's close() function to be called.

Older toolkits achieve this kind of communication using callbacks. A callback is a pointer to a function, so if you want a processing function to notify you about some event you pass a pointer to another function (the callback) to the processing function. The processing function then calls the callback when appropriate. Callbacks have two fundamental flaws: Firstly, they are not type-safe. We can never be certain that the processing function will call the callback with the correct arguments. Secondly, the callback is strongly coupled to the processing function since the processing function must know which callback to call.

In Qt, we have an alternative to the callback technique: We use signals and slots. A signal is emitted when a particular event occurs. A slot is a function that is called in response to a particular signal. Signals and slots are loosely coupled: A class which emits a signal neither knows nor cares which slots receive the signal. Qt's signals and slots mechanism ensures that if you connect a signal to a slot, the slot will be called with the signal's parameters at the right time.

All classes that inherit from QObject or one of its subclasses (e.g., QWidget) can contain signals and slots. When a signal is emitted, the slots connected to it are usually executed immediately, just like a normal function call. This is all the object does to communicate.

Slots can be used for receiving signals, but they are also normal member functions. You can connect as many signals as you want to a single slot, and a signal can be connected to as many slots as you need. It is even possible to connect a signal directly to another signal. (This will emit the second signal immediately whenever the first is emitted.)

详细参考见帮助《Signals & Slots》

2. int QDialog::exec () [slot]

Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result

3. void QDialog::accept () [virtual slot]

Hides the modal dialog and sets the result code to Accepted.

The most common way to display a modal dialog is to call its exec() function. When the user closes the dialog, exec() will provide a useful return value. Typically, to get the dialog to close and return the appropriate value, we connect a default button, e.g. OK, to the accept() slot and a Cancel button to the reject() slot.

详细参考见帮助《QDialog Class Referenc》

实现过程:

1.首先新建Qt Gui 应用工程,工程名为nGui,Base class选为QWidget。建立好后工程文件列表如下图。

2.新建对话框类,如下图,在新建中,选择Qt设计师界面类。

3.选择Dialog without Buttons。

4.类名设为myDlg。

5.点击完成。注意这里已经默认将其加入到了刚建的工程中了。

6.双击mydlg.ui文件,打开设计界面,拖入一个Push Button,将其上的文本改为

“进入主窗口”,在其属性窗口中将其objectName改为enterBtn。

在菜单栏选择编辑-->编辑信号/槽,在下面信号和槽编辑器中进行信号和槽的关联。其中,打开发送者下拉菜单,设为enterBtn,信号设为clicked(),接收者设为myDlg,槽设为accept()。这样就实现了单击这个按钮使这个对话框关闭并发出Accepted信号的功能。下面将利用这个信号。

7.保存mydlg.ui,切换到编辑模式。修改主函数main.cpp,如下:

#include

#include "widget.h"

#include "mydlg.h" //加入头文件

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

Widget w; //主窗口

myDlg my1; //登陆对话框

// void QDialog::accept () [virtual slot] sets the result code to Accepted.

if(my1.exec() ==QDialog::Accepted)

//利用Accepted返回值判断enterBtn是否被按下

{

w.show(); //如果被按下,显示主窗口

return a.exec(); //程序一直执行,直到主窗口关闭}

else

return 0; //如果没被按下,则不会进入主窗口,整个程序结束运行

}

如果主函数写成下面这样:

#include

#include "widget.h"

#include "mydlg.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

myDlg my1;

if(my1.exec()==QDialog::Accepted)

{

Widget w;

w.show();

}

return a.exec();

}

这样,因为对象w是在if语句里定义的,所以当if语句执行完后它就无效了。这样导致的后果就是,按下enterBtn后,主界面窗口一闪就没了。如果此时对程序改动了,再次点击运行时,就会出现error: collect2: ld returned 1 exit status的错误。这是因为虽然主窗口没有显示,但它只是隐藏了,程序并没有结束,而是在后台运行。所以这时改动程序,再运行时便会出错。你可以按下调试栏上面的红色Stop停止按钮结束程序运行。你也可以在windows任务管理器的进程中将该进程结束,而后再次运行就没问题了,当然先关闭Qt Creator,而后再重新打开,这样也能解决问题。

如果把程序改为这样:

#include

#include "widget.h"

#include "mydlg.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

myDlg my1;

Widget w;

if(my1.exec()==QDialog::Accepted)

{

w.show();

}

return a.exec();

}

这样虽然解决了上面主窗口一闪而过的问题,但是,如果在my1对话框出现的时候不点enterBtn,而是直接关闭对话框,那么此时整个程序应该结束执行,但是事实是这样的吗?如果你此时对程序进行了改动,再次按下run按钮,你会发现又出现了error: collect2: ld returned 1 exit status的错误,这说明程序并没有结束,可以打开windows任务管理器,可以看到程序仍在执行。

因为“return a.exec();”一句表示不按下enterBtn,程序就会一直执行。所以

只有用第一种方法,将该语句也放到if语句中,而在else语句中用“else return 0;”,这样如果enterBtn没有被按下,那么程序就会结束执行了。

到这里,实现了一个界面结束执行,然后弹出另一个界面的程序。下面在主窗口上加一个按钮,按下该按钮,弹出另一个对话框,但这个对话框关闭,不会使主窗口关闭。

8.如下图,在主窗口加入按钮,显示文本为“弹出一个对话框”,在其上点击鼠标右键,在弹出的菜单中选择转到槽。

9.选择单击事件clicked()。

10.在弹出的槽函数中添加一句:

w2.show();

w2为新建对话框类的另一个对象,但是w2还没有定义,所以在widget.h 文件中添加相应代码,如下。先加入头文件,再加入w2的定义语句,这里将其放到private里,通常函数都放在public里,而变量放在private里。

#ifndef WIDGET_H

#define WIDGET_H

#include

#include //包含头文件

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

Q_OBJECT

public:

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函数,在此只演示右键“转到槽”

相关主题