QTnullQT编程QT编程长春大学 © 2012.10.20Qt概述Qt概述Qt是Trolltech公司的标志性产品,是一个跨平台的C++图形用户界面(GUI)工具包
Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置
Qt/Windows (Windows XP, 2000, NT 4, Me/98)
Qt/Mac (Mac OS X)
Qt/X11 (Linux, Solaris, HP-UX, IRIX, AIX等)
Qt对不同平台的专门API进...
nullQT编程QT编程长春大学 © 2012.10.20Qt概述Qt概述Qt是Trolltech公司的标志性产品,是一个跨平台的C++图形用户界面(GUI)工具包
Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置
Qt/Windows (Windows XP, 2000, NT 4, Me/98)
Qt/Mac (Mac OS X)
Qt/X11 (Linux, Solaris, HP-UX, IRIX, AIX等)
Qt对不同平台的专门API进行了专门的封装(文件处理,网络等) Qt特征Qt特征引入一种用于无缝对象通讯的被称为信号和槽的非常强大的机制
可查询和可设计的属性,
强大的事件和事件过滤器,
根据上下文进行国际化的字符串翻译,
完善的时间间隔驱动的计时器使得在一个事件驱动的图形界面程序中很好地集成许多任务成为可能。
以一种自然的方式组织对象所有权的分层次和可查询的对象树。
被守护的指针,QGuardedPtr,当参考对象被破坏时,可以自动地设置为无效,不像正常的C++指针在它们的对象被破坏的时候变成了“摇摆指针”。
Qt编程核心技术Qt编程核心技术QT对象模型
元对象系统
信号和插槽
属性
QObject类
对象树
事件处理
元对象系统元对象系统是一个C++扩展,使得QT更适合真正的组件GUI编程
使用元编译器moc产生能被
C++编译器访问的附加C++代码
带有moc预编译器的C++基本上提供了面向对象的C的灵活性或类似于Java的运行环境,并保持了C++的执行效率和扩展性
实现功能
对象间通信的信号/插槽机制
运行时的类型信息
动态属性系统信号和插槽信号和插槽在Qt程序中,利用信号(signal)和插槽(slot)机制进行对象间的通信
事件处理的方式也是回调
当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signal
signal和slot机制真正实现了封装的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且signal和slot之间也不是一一对应的。
Signal和Slot的声明(1/2)Signal和Slot的声明(1/2)在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义
class Student : public QObject
{
Q_OBJECT
public:
Student() { myMark = 0; }
int mark() const { return myMark; }
public slots:
void setMark(int newMark);
signals:
void markChanged(int newMark);
private:
int myMark;
};Signal和Slot的声明(2/2)Signal和Slot的声明(2/2)signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signal
void Student::setMark(int newMark)
{
if (newMark!= myMark) {
myMark = newMark;
emit markChanged(myMark);
}
}Signal和Slot的连接(1/2)Signal和Slot的连接(1/2)在signal和slot声明以后,需要使用connect()函数将它们连接起来。
connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal,函数原形如下:
bool QObject::connect (
const QObject * sender, const char * signal,
const QObject * receiver, const char * member
) [static]
其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件 Signal和Slot的连接(2/2)Signal和Slot的连接(2/2)在使用connect()函数进行来接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下:
QLabel *label = new QLabel;
QScrollBar *scroll = new QScrollBar;
QObject::connect(
scroll,SIGNAL(valueChanged(int)),
label, SLOT(setNum(int))
);
Signal和Slot的连接方式Signal和Slot的连接方式取消Signal和Slot连接取消Signal和Slot连接取消一个连接
disconnect(lcd,SIGNAL(overflow()),this, SLOT(handleMathError()));
取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接属性属性属性也是一个类的成员
在类声明中用宏Q_PROPERTY来声明
只能在继承于QObject的子类中声明
设置和得到属性的成员函数如下:
QObject::setProperty()
QMetaObject::propertyNames()
QMetaObject::property ()QObject类QObject类QObject是Qt类体系的唯一基类,是Qt各种功能的源头活水,就象MFC中的CObject和Dephi中的TObject
connect():提供信号槽机制
对象树:QObject在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject时,它就被添加到父对象的children() 列
中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。
事件:事件是由窗口系统或qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的。
事件运行机制事件运行机制事件循环QApplicationQApplicationQApplication和QWidget都是QObject类的子类
QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的QWidgetQWidgetQWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上
QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类一个完整的Qt程序一个完整的Qt程序
1 #include
2 #include
3 int main (int argc, char *argv [])
4 {
5 QApplication app (argc, argv);
6 QLabel *label = new QLabel ("Hello Qt!");
7 label->show ();
8 return app. exec ();
9 }nullQt DesignerQt DesignerQt Designer直接使用代码来直接编写GUI无疑是非常痛苦的,好在QT提供了界面开发工具:QTdesigner
Qt应用程序除了使用手工编写代码的方式外,还可以用过Qt Desinger来完成
Qt Designer的功能十分强大,界面类似于VB,而且还提供了大量可供编程使用的组件null基于Qt Designer程序设计(1/4)基于Qt Designer程序设计(1/4)在使用Qt Designer程序开发时,一般要涉及到下面几个步骤:
1.创建和初始化子部件
2.设置子部件布局
3.设置Tab键次序(不是必须)
4.建立信号与插槽的连接
5.编写事件处理函数 基于Qt Designer程序设计(2/4)基于Qt Designer程序设计(2/4)1.创建并布置部件2.对部件使用布局管理3.建立信号与插槽的连接基于Qt Designer程序设计(3/4)基于Qt Designer程序设计(3/4) 编辑两个部件之间信号与插槽之间的连接方式基于Qt Designer程序设计(4/4)基于Qt Designer程序设计(4/4) Qt Designer下不同风格的预览Qt Designer的工作过程Qt Designer的工作过程Qt Designer将工程文件组织成.ui的文件
由.ui文件生成 .h文件
.ui -----xml
UIC -o form.h form.ui
需要注意的是,在QT3中使用例如UIC -o form.cpp -i form.h form.ui这样的方式来生成表单的CPP文件,但在QT4中,UIC已经作了修改,不能输出表单的CPP文件
由C++编译器编译所有.h和.cpp文件Qt Designer 功能框图Qt Designer 功能框图nullQt 程序开发Qt程序开发过程Qt程序开发过程使用designer
设计界面,添加窗口组件
建立信号槽连接
编写事件处理函数
保存工程为.ui文件,得到一个主窗口类
2. 编写main.cpp文件进行主窗口类的实例化及显示
3. 设置编译所需的环境变量
QTDIR =
Qt程序开发过程Qt程序开发过程 4.使用qmake生成.pro工程文件
[root@Intel qt4]qmake -project
5.通过qmake自动生成Makefile文件
[root@Intel qt4]qmake
6. make生成可执行文件
7.运行
本文档为【QT】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。