【C/C++】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对象中的。



示例效果



工程源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
*功能:滑动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引进的一种处理机制,信号可以被理解为一个对象发出的事件请求,槽是处理信号的函数。

设计信号和槽的机制是为了避免回调函数的缺点回调函数是一个函数指针,如果希望一个处理函数发出一些通知事件,可以把另一个函数的指针传递给处理函数,处理函数在适当的时候使用函数指针回调通知函数。从回调函数的调用过程可以看出,回调函数存在类型不安全和参数不安全的缺点。因为对于调用函数来说,通过函数指针无法判断出函数的返回类型以及参数类型。

  信号和槽能完成回调函数的所有功能,并且信号和槽机制是类型安全的,而且还能完成其他许多复杂的功能。

  信号和槽不仅是单一的对应关系,还可以是多对多的关系。一个信号可以被连接到多个槽,一个槽也可以响应多个信号,此外,信号之间也可以被连接。



本文转自infohacker 51CTO博客,原文链接:http://blog.51cto.com/liucw/1199405

相关文章
|
5月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
273 14
|
11月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
249 6
|
11月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
228 10
|
8月前
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
179 11
WK
|
10月前
|
开发框架 开发工具 C++
C++跨平台框架Qt
Qt是一个功能强大的C++跨平台应用程序开发框架,支持Windows、macOS、Linux、Android和iOS等操作系统。它提供了250多个C++类,涵盖GUI设计、数据库操作、网络编程等功能。Qt的核心特点是跨平台性、丰富的类库、信号与槽机制,以及良好的文档和社区支持。Qt Creator是其官方IDE,提供了一整套开发工具,方便创建、编译、调试和运行应用程序。Qt适用于桌面、嵌入式和移动应用开发。
WK
332 5
|
11月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
150 5
|
11月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
171 1
|
12月前
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
134 6
|
7月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
3月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
83 0