【Qt】qt库结构及示例
QT库结构
Qt图形库是一个组织严谨的C++类库,其结构如图所示

细说Qt库
Qt类库中包含了上百个类,结构十分复杂,上图展示了Qt_3.2类库的基本结构。
Qt类库中的类可以分成两种类型:
一种是直接或者继承自Qt类
另一种是独立的,不从任何类集成
独立的类在Qt库中一般用来完成独立的功能,例如操作XML文件的QXmlReader类。
直接从从Qt类继承的类主要可以分成QObject类和QEvent类。QObject类是所有应用组件的基类,QEvent类是所有QT事件响应类的基类。其他的还有QCursor、QPen、QTab等类描述的窗口组件可以在窗体的任意地方出现,因此直接从Qt基类继承。
QWidget类是组件容器,所有可以结合在一起的组件都从该类继承。QWidget类继承自QObject类,因为所有的窗体组件都是应用组件的一部分。
Qt类库组织合理,在使用的时候按照类的集成关系操作。如QButton、QSlider等组件可以被加入到QWidget对象中,而QProcess、QTimer组件是不能加入到QWidget对象中的。
示例效果

工程源码
/*
*功能:滑动Slider控件的滑块时,Spin控件的数值相应改变。同样的,在修改Spin控件值的时候,Slider控件的数值也相应变化
*/
#include <qapplication.h>
#include <qpushbutton.h>
#include <qlayout.h>
#include <qslider.h>
#include <qspinbox.h>
#include <qwidget.h>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent=0); //声明MyWidget类的构造函数
}; //注意分号
MyWidget::MyWidget(QWidget *parent):QWidget(parent)
{
QSpinBox *agenum_sb=new QSpinBox();
agenum_sb->setRange(0,100);
agenum_sb->setValue(0);
QSlider *agenum_sl=new QSlider(Qt::Horizontal);
agenum_sl->setRange(0,100);
agenum_sl->setValue(0);
connect(agenum_sb,SIGNAL(valueChanged(int)),agenum_sl,SLOT(setValue(int)));
//设置Spin控件修改数值响应函数,将Spin控件改变数值的事件与Slider控件关联
connect(agenum_sl,SIGNAL(valueChanged(int)),agenum_sb,SLOT(setValue(int)));
//设置SLider控件修改数值响应函数,将Slider控件改变数值的事件与Spin控件关联
QHBoxLayout *layout=new QHBoxLayout; //创建列布局的对象
layout->addWidget(agenum_sb);
layout->addWidget(agenum_sl);
setLayout(layout); //设置MyWidget使用列布局
setWindowTitle("Enter a number By-Mystery"); //设置窗体标题
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
Qt中信号与槽系统
源码中的connect()函数原型为:connect(boject1, signal, object2, slot);
其中,Object1和Object2分别代表两个不同的Qt对象(继承自QObject基类),signal代表Object的信号,slot代表Object2的槽。
信号和槽是Qt引进的一种处理机制,信号可以被理解为一个对象发出的事件请求,槽是处理信号的函数。
设计信号和槽的机制是为了避免回调函数的缺点。回调函数是一个函数指针,如果希望一个处理函数发出一些通知事件,可以把另一个函数的指针传递给处理函数,处理函数在适当的时候使用函数指针回调通知函数。从回调函数的调用过程可以看出,回调函数存在类型不安全和参数不安全的缺点。因为对于调用函数来说,通过函数指针无法判断出函数的返回类型以及参数类型。
信号和槽能完成回调函数的所有功能,并且信号和槽机制是类型安全的,而且还能完成其他许多复杂的功能。
信号和槽不仅是单一的对应关系,还可以是多对多的关系。一个信号可以被连接到多个槽,一个槽也可以响应多个信号,此外,信号之间也可以被连接。
本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1199405
【Qt】qt库结构及示例的更多相关文章
- QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)
背景: 最近在做的一个项目其中一部分既是实现PC与下位机的USB通信.windows平台下已经完成,现需移植到linux平台下. 在linux系统中,通过一段时间的工作,设备已被配置成hid类(后续再 ...
- paip.c++ qt 共享库dll的建立
paip.c++ qt 共享库dll的建立 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/at ...
- qt 网络库使用介绍
qt 网络库使用介绍 在.pro文件中,要手动添加network模块:QT += network 有三个核心类, QNetworkAccessManager: 发送get或者post请求. 用get方 ...
- qt动态库实现无边框窗体的消息处理 nativeEvent的使用
需求: 在动态库中创建一个窗口句柄,可以给外部调用,库的调用者,通过这个句柄发送消息到底层库,库里面可以实现对消息的处理 m_FHandle=AllocateHWnd(WndProcDllMsg); ...
- Qt... configure: error: Qt (>= Qt 2.2.2) (headers…
转载:http://blog.chinaunix.net/uid-23733724-id-290980.html 昨天开始在自己的fedora12下装qt~ 但是按照教程在/opt/Embed ...
- QT QT creator QTsdk的区别
Qt是一个跨平台的C++图形用户界面应用程序框架.它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程. QT Creator 跨平台 ...
- QT,QT SDK, QT Creator 区别
Qt是一个跨平台的C++图形用户界面应用程序框架.(不仅仅是C++,还包括QML,Qquick,html5)它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩 ...
- Qt, QT/E, Qtopia 的区别
转自Qt, QT/E, Qtopia 的区别 Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等.由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Q ...
- Python的collections模块中namedtuple结构使用示例
namedtuple顾名思义,就是名字+元组的数据结构,下面就来看一下Python的collections模块中namedtuple结构使用示例 namedtuple 就是命名的 tuple,比较 ...
随机推荐
- java实现读取ftp服务器上的csv文件
定义ftp操作接口 import java.io.InputStream; import java.util.List; import org.apache.commons.net.ftp.FTPCl ...
- [SQL Server]从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
见下图sql, 使用dateadd()转换时报如题错误, 原因是数据库表中存入的数据格式不正确, 数据格式不正确, 数据格式不正确, 重要的事情讲3遍!! ca.batch_no的前8位必须是日 ...
- string与char*的转换方法
c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化,下面就是这一转化过程. c++语言提供了两种字符串实现,其中较原始的一种只是字符串的c语言 ...
- JSP内置对象之WEB安全性及config对象
一.WEB-INF的安全性是最高的. 在Java EE的标准中,Web目录中的WEB-INF是必须存在的,而且此文件夹的安全性是最高的,在各个程序的开发中,基本上都将一些配置信息保存在此文件夹中.在定 ...
- [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用
1. 服务器基本安装即问题解决记录 √ 2. SVN环境搭建和客户端使用 2.1 服务端 和 客户端 安装 √ 2.2 项目建立与基本使用 √ 2.3 基本冲突解决, ...
- easyui刷新指定tab页里面的数据
主页Home/Index中使用tab管理,在主页中设置一个刷新的方法. /** * 刷新指定的tab里面的数据 * @param title 选项卡标题 * @param refreshTabFunc ...
- angularjs框架及其生态环境 --待续
angular的MVVM框架结构: 1. app, 2.routes, config, 3.module, 4.Controller, $scope,controller参数,事件 ...
- Maven for Eclipse 第二章 ——安装 m2eclipse插件
m2eclipse 是一个提供了 Maven 与 Eclipse 整合的插件.它的意图是桥接上 Maven 和 Eclipse 之间的缺口.通过 Maven 原型提供的简单直白的接口创建项目,它使 M ...
- 开关电源电路中变压器次级输出绕组RC串联并接在二极管两端的作用
二极管反向恢复时会产生浪涌电压,这里RC主要是吸收二极管D1产生的浪涌电压,防止二极管损坏. 寄生电容:寄生电容一般是指电感,电阻,芯片引脚等在高频情况下表现出来的电容特性.实际上,一个电阻等效于一个 ...
- 常用代码之二:使用BackgroundWorker或Task让代码异步执行。
先要引用System.ComponentModel using System.ComponentModel; 然后创建backgroundworker private void backgroundW ...