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库结构及示例相关推荐

  1. c调用c++ qt_【C/C++】qt库结构及示例

    QT库结构 Qt图形库是一个组织严谨的C++类库,其结构如图所示 细说Qt库 Qt类库中包含了上百个类,结构十分复杂,上图展示了Qt_3.2类库的基本结构. Qt类库中的类可以分成两种类型:一种是直接 ...

  2. pyqt5 qstring在哪个库_PyQt模型/视图结构编程示例:QStringListModel的用法

    引言 Python是一种面向对象的高级动态编程语言,相比于其它如C/C++语言,具有上手快.代码少.开发效率高的特点,Qt是跨平台的C++图形用户界面应用程序开发框架,是当前主流的GUI开发工具之一, ...

  3. QT 静态库和动态库的使用方法

    QT 静态库和动态库的使用方法 背景知识:程序在编译成可执行文件时,会有四步过程: 1预处理(头文件和宏定义) g++ -E 1.cpp -o 1.i 2编译 将c代码编译成汇编代码 g++ -S 1 ...

  4. pythonqt库_Python QT组件库qtwidgets的使用

    虽然Qt提供了不少现成的组件,但是在Python中使用PyQt5或PySide2进行图形界面程序开发的过程,还是免不了要根据自己的需求组合一些小部件以形成新的自定义组件. 最近州的先生在写一个桌面图形 ...

  5. Qt Creator构建并运行示例

    Qt Creator构建并运行示例 构建并运行示例 构建并运行示例 您可以通过打开现有的示例应用程序项目来测试Qt安装是否成功. 要在Android或iOS设备上运行示例应用程序,必须为Android ...

  6. Qt文档阅读笔记-Qt跨平台库(Qt基本库)

    Qt基本库是所有Qt平台的基础分.他能在所有支持开发的平台和测试平台上跑.这些库在Qt5中已经保持源代码和二进制的兼容. 基本模块(基本库)被其他特殊模块所附加. 下面是Qt基本模块(基本库)的列表: ...

  7. 02.vs2015编译qt动态库

    vs2015编译qt动态库 1 编译动态库 昨天重新使用了一下qt动态库,现对qt动态库现进行重新梳理一下,以便后续查阅. 创建qt库工程 编辑加法库,因为比较直观 编译生成动态库 2调用动态库方法一 ...

  8. 更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL)

    更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL) 参考文章: (1)更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL) (2)https:// ...

  9. linux 安装qt mysql库_Linux下QT平台Mysql数据库开发环境配置

    This doucment is about how to add mysql driver into QT and about database connections     由于之前安装RedH ...

最新文章

  1. swift_046(Swift map,filter, reduce方法)
  2. Android开发工具GenyMotion安装和使用方法
  3. POJ - 3294 Life Forms(二分+后缀数组)
  4. 信息系统管理19年真题选择题
  5. C语言课后习题(53)
  6. 查看Python第三方库的帮助文档
  7. 安卓初级开发教程 ppt+视频+案例源码
  8. 安卓一键清理内存_一键深度清理手机内存,从此和卡顿再见
  9. Charles破解和安装【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证
  10. 基于GPT2实现考公申论文章生成
  11. 学习一下什么是SRE和DevOps
  12. 计算机课第一节可以讲些什么,高职《大学计算机基础》第1节课讲点什么?
  13. 烽火2640路由器命令行手册-03-广域网配置命令
  14. Keras深度学习实战(37)——手写文字识别
  15. 沐风:了不起的便利店
  16. registerServiceWorker
  17. 带你薅“云”羊毛:定个小目标,先薅他一年
  18. 校招面试京东Java岗,入职薪资18k,已拿offer
  19. Mansory的简单使用
  20. Ubuntu U盘启动工具Rufus制作(详细步骤)

热门文章

  1. matlab中Cci,【指标量化】超买超卖——CCI 顺势指标
  2. nodejs mysql 返回值_带有Mysql数据库返回值的Nodejs
  3. WINDOWS下面使用ICE操作记录
  4. Spring Boot基础学习笔记11:Spring MVC
  5. TensorFlow学习笔记01:TensorFlow入门
  6. java编译生成哪些文件_java编译后生成什么文件?生成的文件包括什么?
  7. 如何在服务器运行aspx_ASP.NET开发实战——(四)MVC是如何运行?它的生命周期是什么?...
  8. 电脑小写字母怎么切换_苹果电脑双系统如何切换?苹果电脑双系统切换方法
  9. 2017.9.10 连续攻击游戏 思考记录
  10. 【英语学习】【Level 07】U05 Best Destination L5 Top choice