- 浏览: 115423 次
- 性别:
- 来自: 北京
文章分类
最新评论
C++ GUI Qt4编程--阅读笔记(原创)
由 王宇 原创并发布
:
第一章Qt入门
1.1HellowQt
qmake-project
qmakehello.pro
make
1.2建立连接
QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit());
1.3窗口部件的布局
1.4使用参考文档:QtAssistant
第二章创建对话框
2.1子类化QDialog
2.2深入介绍信号和槽
connect(sender,SIGNAL(signal),receiver,SLOT(slot))
一个信号可以连接多个槽
多个信号可以连接同一个槽
一个信号可以与另外一个信号相连接
连接可以被移除
2.3快速设计对话框
QtDesigner
主程序:UI::GoToCellDiaglogui;QDialog*dialog=newQDialog();ui.setUi(dialog);dialog->show();
2.4改变形状的对话框
扩展对话框
扩展对话框通常只显示简单的外观,但是他还有一个切换按键,可以让用户在对话框的简单外观和扩展外观之间来回切换
多页对话框:QTabWidget
2.5动态对话框
动态对话框就是在程序运行是使用的从Qt设计师的.ui文件创建而来的那些对话框。动态对话框不需要通过uic把.ui文件转换成C++代码,相反它是程序运行的时候使用QUiLoader类载入该文件的
QUiLoaderuiLoader;QFilefile("sortdialog.ui");QWidget*sortDialog=uiLoader.load(&file);
2.6内置的窗口部件类和对话框类
Qt的按键部件
QPushButton、QToolButton、QCheckBox、QRadioButton
Qt的显示窗口部件
QLabel、QLCDNumber、QProgreeBar、QTextBrowser
Qt的输入窗口部件
QTextEdit、QSpinBox、QDoubleBox、QComboBox、QDataEdit、QTimeEdit、QDateTimeEdit、QScrollBar
Qt单页容器窗口部件
QGroupBox、QFrame、QTabWidget、QToolBox
Qt的项目视图窗口部件
QListView、QTreeView、QTableView
Qt的反馈对话框
QMessageBox、QInputDialog、QProgressDialog、QErrorMesage
Qt的颜色对话框和字体对话框
QColoerDialogQFontDialog
Qt文件对话框和打印对话框
QFileDialog、QPrintDialog
第三章创建主窗口
3.1子类化QMainWindow
3.2创建菜单和工具栏
3.3设置状态栏
3.4实现File菜单
3.5使用对话框
3.6存储设置
3.7多文档
3.8程序启动动画
第四章实现应用程序的功能
第五章创建自定义窗口部件
5.1自定义Qt窗口部件
通过继承子类的方法
5.2子类化QWidget
许多自定义窗口部件都是对现有窗口部件的简单组合,不论它们是内置的Qt窗口部件,还是其他一些部件,通过对现有窗口部件的组合构建而成的自定义窗口部件
5.3在Qt设计师中集成自定义窗口部件
改进法是最快捷和简单的方法
改进法的缺点:在QTDesigner中,无法对自定义窗口部件中的那些特定属性进行访问,并且也无法对这个窗口部件自身进行绘制
插入法需要创建一个插件库,QtDesigter可以在运行时加载这个库,并且可以利用该库创建窗口部件的实例
5.4双缓冲
是一种图形用户界面编程技术,它包括把一个窗口部件渲染到一个脱屏像素映射中以及把这个像素映射复制到显示器上
第六章布局管理
布局类:QHBoxLayout、QVBoxLayout、QGridLayout、QStractLayout
6.1在窗口中摆放窗口部件
绝对位置法:窗口部件分配固定的大小和位置
人工布句法:给定的大小尺寸总是可以和窗口的大小成比例
布局管理法:QHBoxLayout、QVBoxLayout、QGridLayout
6.2分组布局
QStackedLayout类可以对一组子窗口部件进行摆放,或者对它们进行“分页”,而且一次只显示其中一个,而把其他的子窗口部件或者分页都隐藏起来
6.3切分窗口
QSplitter就是一个可以包含一些其他窗口部件的窗口部件。例如资源管理器中的左右结构
6.4滚动区域
QScrollArea类提供了一个可以滚动的视口和两个滚动条
6.5停靠窗口和工具栏
停靠窗口是指一些可以停靠在QMainWindow中或是浮动为独立窗口
四个停靠窗口区域:
中央窗口部件的上部、下部、左侧、右侧
6.6多文档界面
第七章事件处理
事件是有窗口系统或者Qt自身产生的,用以响应所发生的各类事情
不应该混淆“事件”和“信号”这两个概念。一般情况下,在使用窗口部件的时候,信号是十分有用的;而在实现窗口部件时,事件则是十分有用的
例如,当使用QPushButton时,我们对于它的clicked()信号往往更为关注,而很少关心促成发射该信号的底层鼠标或者键盘事件
7.1重新实现事件处理器
7.2安装事件过滤器
5个级别的事件处理和事件过滤方法
1、重新实现特殊的事件处理器
2、重新实现QObjec::event();
3、在QObject中安装事件过滤器
4、在QApplication对象中安装事件过滤器
5、子类化QApplication并且重新实现notify()
7.3处理密集时的响应保持
第八章二维图形
Qt的二维图形引擎是基于QPainter类的
几何形状:点、线、矩形、椭圆、饼状图等
高级特性:反走样(文字和图形边缘)、像素混合、渐变填充和矢量路径
QPainter可以画在“绘图设备”上,例如:QWideget、QPixmap、QImage;也可以用来打印文件和创建PDF
可以使用OpenGL命令来替代QPainter
8.1用QPainter绘图
三个主要工具:画笔、画刷、字体
画笔用来画线和边缘。它包括颜色、宽度、线形、拐点风格及连接风格
画刷用来填充几个形状的图案
字体用来绘制文字。
QPainterPath类可以通过连接基本的图形元素来确定任意的矢量形状:直线、椭圆、多边形、弧形和其他的绘制路径
绘制路径是基本的图元,从这个意义上来说,任何图形或图形组合都可以用绘制路径描述
8.2坐标系统变换
理论上,像素的中心取决于半像素坐标。
如果告诉QPainter绘制一个像素。例如:(100,100)它会相应地在两个方向做+0.5的偏移,使得像素点得中心位置在(100.5,100,5)
这一差别初看起来理论性很强,但它在实践中却很重要。首先只有当反走样无效时(默认情况)才偏移+0.5;如果反走样有效,并且我们试图在(100,100)的位置绘制一个黑色的像素,实际上QPainter会为(99.5,99.5)(99.5,100.5)(100,5,99.5)(100.5,100.5)四个像素点着浅灰色,给人的印象是一个像素正好位于四个像素的重合处
如果不需要这种效果,可以通过指定半像素坐标或者通过偏移QPainter(+0.5,+0.5)来避免这种效果的出现
世界变换是在窗口-视口转换之外使用的变换矩阵。它允许移动、缩放、旋转或者拉伸绘制的项
8.3用QImage高质量绘图
绘图时,我们可能需要面对速度和准确率的折中问题
Qt受限于平台的内在支持:
在X11上,类似反走样以及对分数坐标的支持只有当X服务器上存在X渲染扩展时才有效
在MacOSX上,内置的走样绘图引擎使用与X11和Windows不同的算法绘制多边形,绘制结果也稍有不同
Qt图形引擎的一个特别强大的特性是它支持复合模式
默认的复合模式是QImage::CompositionMode_SourceOver,这意味着源像素(正在绘制的像素)被混合在目的像素(已存在的像素)上,这样,源图像的透明部分给我们以透明效果
8.4基于项的图形视图
如果需要处理从几个到几万的项时,而且要求用户能够点击、拖动、和选取项,Qt的视图类提供了对这一个问题的解决方案
Qt的视图体系包括一个由QGraphicScene充当的场景和一些由QGraphicItem的子类充当
8.5打印
Qt中的打印与在QWidget、QPixmap或者QImage上的绘制非常相似,它包含以下步骤:
1、创建一个当作绘制设备的QPrinter.
2、弹出一个QPrinterDialog对话框,以允许用户选择打印机并且设置一些选项
3、创建一个在QPrinter上操作的QPainter
4、使用QPainter绘制一页
5、调用QPainter::newPage()来进行下一页的绘制
6、重复步骤4和步骤5,直到所有页都被打印为止
第九章拖放
拖放是在一个应用程序内或者多个应用程序之间传递信号的一种直观的现代操作方式
9.1使拖放生效
当用户把一个对象拖动到这个窗口部件上时,就会调用dragEnterEvent()
当用户在窗口部件上放下一个对象时,就会调用dropEvent()
QWidget也提供dragMoveEvent()和dragLeaveEvent()
9.2支持自定义拖动类型
9.3剪贴板处理技术
第十章项视图类
第十一章容器类
容器类通常是用于在内存中存储给定类型的许多项的模板类
既可以使用Qt容器也可以使用STL容器
Qt容易的主要优点是它们在所有的平台上在运行时都表现得一致,并且它们都是隐含共享的
隐含共享或者称为“写时复制”是一个能够把整个容器作为不需要太多运行成本的值来传递的最优化过程
Qt容器的另一个主要特征就是易于使用的迭代器类,这是从java中得到的灵感,它们可以利用QDataStream变成数据流,而且它们通常可以使可执行文件中的代码量比相应的STL类中的要少
最后在Qt/EmbededLinux支持的一些硬件平台上,通常只能使用Qt容器
Qt提供了:QVector<T>、QLinkedList<T>、QList<T>、QMap<K,T>、QHash<K,T>
QString、QByteArrag和QVariant与容器有很多相似之处
11.1连续容器
QVector<T>是一种与数组相似的数据结构,它可以把项存储到内存中相邻近的位置
向量与普通C++数组的区别在于:向量知道自己的大小并且可以被重新定义大小
对比较大的向量来说,在QVector<T>的开头或者中间插入项,或者在这些位置去除项,都是非常耗时的,因此Qt提供了QLinkedList<T>这是一种把项存储到内存中不相邻位置的数据结构(链表)
QList<T>连续容器是一个“数组列表”,结合了单一类中QVector<T>和QLinkedList<T>的最重要的优点
除非我们想在一个极大的列表中执行插入或者要求列表中的元素都必须占据连续的内存地址,否则QList<T>通常是最合适采用的多用途容器类
QStringList类是被广泛用于Qt应用编程接口的QList<QString>,还提供一些特别的函数,以使得这种类对字符串的处理方式更通用
11.2并联容器
并联容器可以保存任意多个具有相同类型的项,且它们由一个键索引:主要提供:QMap<K,T>QHash<K,T>
QMap<K,T>是一个以升序键顺序存储键值对的数据结构,这种排列使它可以提供良好的查找和插入性能以及键序的迭代
QHash<K,T>是一个在哈希表中存储键值对的数据结构,与QMap<K,T>相比,它对K的模板类型有不同的要求,而且它提供了比QMap<K,T>更快的查找功能
11.3通过算法
<QAlgorithms>类在容器上实现基本算法的一套全局模板函数
qFind(list.begin(),list.end(),"key");
qFill组装一个容器
qCopy()
qSort()、qStableSort()
qDeleteAll()
qSwap()
11.4字符串、字节组和变量
QString、QByteArray、QVariant使用隐含共享来最优化内存和速度
QString不仅仅是为用户界面,更多的是为数据结构所用
QString转换为constchar*,可以使用toAscii()或toLatin1()
QByteArray上调用data()或constData()时,返回的字符串属于QByteArray对象。这就意味着不必为内存泄漏而担心,Qt将为我们重新收回内存
另一方面,必须注意不要太长时间地使用指针
第十二章输入与输出
从文件或者其他设备读取或者写入数据几乎是每个应用程序共有的特点
Qt通过QIODevice为输入输出提供了极佳的支持
QIODevice是一个封装能够读写字节块“设备”的强有力的提取器
QFile
QTemporaryFile
QBuffer
QProcess
QTcpSocket
QUdpSoclet
QSslSocket
QProcess、QTcpSocket、QUdpSocket和SslSocket都是顺序存储设备,这意味着所存储的数据从第一个字节开始到最后一个字节为止只能读取一次
QFile、QTemporayFile和QBuffer则是随机存取设备,因此可以从任意位置多次读取字节位所存储的数据
QDataStream用来多写二进制数据,QTextStream用来读写文本数据
QFile使存取单个文件变得简单
QProcess类允许启动外部程序并通过标准输入、输出以及标准错误通道与外部程序交互
网络与XML的读写,都是非常重要的主题
12.1读取和写入二进制数据
Qt中载入和保存二进制数据的最简单方式是通过实例化一个QFile打开文件,然后通过QDataStream对象存取它
QDataStream提供了一种与运行平台无关的存储格式,它不仅支持QList<T>和QMap<K,T>等Qt容器类,还支持整型和双精度等基本的C++类,以及其他许多Qt数据类型
12.2读取和写入文本
Qt提供了QTextStream类读写纯文本文件以及如HTML、XML和源代码等其他文件格式的文件
QText
Stream
第十三章数据库
QSqlDatabase QSqlQuery QSqlTableModel QTableView QSqlTableModel
第十四章多线程
QT hread QMutex QReadWriteLock QSemaphore QWaitCondition
第十五章网络
第十六章XML
QXmlStreamReader QXmlSimpleReader QXmlStreamWriter
第十七章提供在线帮助
第十八章国际化
第十九章自定义外观
第二十章三维图形
第二十一章创建插件
第二十二章应用程序脚本
发表评论
-
深入理解C++11阅读笔记
2018-06-28 14:12 1071编写: 王宇 2017-12-14 一 新标准 ... -
单链表归并排序
2016-09-30 16:20 548单链表归并排序-O(nlogn) 由 王宇 ... -
单链表的增、删、改、查
2015-05-22 11:57 718单链表的增、删、改、查(原创) 由 ... -
Unix 网络编程_阅读笔记四 线程、客户/服务器程序设计范式
2015-03-05 17:32 831Unix 网络编程_阅读笔记 四 (Socket高级篇之线 ... -
Unix 网络编程_阅读笔记三 广播、多播、UDP套接字、信号驱动式I/O
2015-03-05 16:10 1588Unix 网络编程_阅读笔 ... -
Unix 网络编程_阅读笔记二 守护进程和高级I/O
2015-03-05 15:25 1001Unix 网络编程_阅读笔记 二 (Socket高级篇之守 ... -
Unix 网络编程_阅读笔记一 Socket基础篇
2015-02-10 17:01 997Unix 网络编程(阅读笔记 一Socket基础篇) - ... -
在C语言环境下,编写自己的Vector容器。
2014-04-28 17:22 6838在C语言环境下,编 ... -
红红纪念日记录器(原创)
2014-04-04 14:17 1153红红纪念日记录器(原创) ... -
深度探索C++对象模型-- Data 语意学(阅读笔记)(原创)
2014-02-18 16:05 1463深度探索C++对象模型(阅读笔记)(原创) Inside ... -
深度探索C++ 对象模型--构造函数语意学(阅读笔记)(原创)
2013-10-10 16:17 1307深度探索C++ 对象模型(阅读笔记)(原创) Insid ... -
深度探索C++ 对象模型--关于对象(阅读笔记)(原创)
2013-09-26 15:07 1559... -
eSpeak 安装部署记录(原创)
2013-04-22 16:13 3628eSpeak安装部署记录(原创) 由 ... -
基础算法总结(原创)
2012-07-12 21:13 996基 础 算 法 总 结(原创) 由 王宇 ... -
C++ Template--阅读笔记(原创)
2012-05-26 21:45 1413由 王宇 原创并发布 : 第2章函数模板 ... -
C缺陷和陷阱--阅读笔记(原创)
2012-05-26 21:27 1086由 王宇 原创并发布 : 第1章词法陷阱 ... -
Effective C++--阅读笔记(原创)
2012-05-26 21:06 1292由 王宇 原创并发布 ...
相关推荐
**C++ GUI Qt4 编程 学习笔记** 在深入探讨C++使用Qt4进行图形用户界面(GUI)编程之前,我们先了解Qt库的基本概念。Qt是一个跨平台的应用程序开发框架,由挪威Qt公司(原属于诺基亚)开发,支持Windows、Linux、...
在本节中,我们将深入探讨《C++ GUI Qt4 编程(第二版)》一书中2.4章节关于“改变形状的对话框”的练习源码。Qt4是一个强大的跨平台应用程序开发框架,尤其适用于创建图形用户界面。该书通过实践性的例子帮助读者...
《C++.GUI.Programming.with.Qt.4》是关于使用Qt 4框架进行C++图形用户界面编程的经典著作。这本书深入浅出地介绍了如何利用Qt库创建功能丰富的桌面应用程序。读书笔记涵盖的章节从11到20,涵盖了Qt开发中的多个关键...
《C++ GUI Programming with Qt 4 学习笔记》这份资料是关于学习使用Qt框架进行C++图形用户界面(GUI)编程的笔记。Qt是一个跨平台的应用程序和用户界面框架,广泛应用于Linux、Windows、Mac OS X、Android和iOS等...
在本实例中,我们将深入探讨如何使用Qt4进行GUI编程,通过提供的源代码文件来学习各个章节的关键知识点。 1. **项目的构建与配置** - `examples.pro`是Qt项目的配置文件,其中包含了项目依赖、编译选项等信息。...
在本项目"Qt开发-forecasting-based-on-deep-learning-笔记"中,主要涉及的是使用Qt框架进行深度学习预测应用的开发。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面、移动以及嵌入式系统。深度...
Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛用于创建桌面和移动设备的应用程序。Material Design则是Google推出的一种现代设计语言,旨在提供统一、直观、富有层次感的用户体验。`qt-material`库将这...
Qt是一款强大的跨平台C++开发框架,专为构建具有艺术级别的图形用户界面(GUI)应用而设计。Qt库提供了丰富的API,支持多种操作系统,如Windows、Linux、macOS、Android以及iOS,使得开发者能够在不同平台上无缝迁移...
### Qt4 学习笔记知识点总结 #### 一、Qt 简介 - **Qt** 是由 **Nokia** 公司(原 Trolltech)开发的一款强大的 **C++** 图形用户界面库,能够跨多个操作系统平台使用,如 Windows、Linux、Unix 等。 - **Qt** 的...
笔记扫描版本
笔记扫描版本
Qt 是一个跨平台的应用程序框架,主要用于创建 GUI(图形用户界面)应用。它支持多种操作系统,如 Windows、Linux 和 macOS,并且拥有丰富的类库来帮助开发者快速构建高性能的应用程序。 ### 二、Q_PROPERTY 与 ...
【Visual Studio 2008 QT编程学习笔记1】这篇笔记主要讲述了如何在Visual Studio 2008中集成和使用QT框架进行GUI开发。以下是关键知识点的详细说明: 1. **QT安装与配置**: - 安装QT:使用的是`qt-win-opensource...
Qt4引入了QML作为新的界面技术,虽然提供了更高级的声明式编程和动态效果,但目前QML仍存在一些限制。例如,QML不支持父窗口透明,这使得创建具有圆角窗口的应用变得困难。此外,QML的控件库相对较少,缺乏诸如时间...
总的来说,这份笔记涵盖了QT开发的多个方面,从基本的GUI构建到高级的网络和数据库操作,再到并发和本地化,是学习和理解QT开发的一份全面参考资料。如果你对QT感兴趣,或者正在从事相关开发工作,这份笔记无疑会为...
总之,C++ Qt6跨平台开发涵盖了大量的技术领域,从基础的C++编程到高级的GUI设计、网络通信和数据库操作,都需要开发者具备扎实的理论知识和实践经验。通过不断学习和实践,开发者可以充分利用Qt6的强大功能,创建出...
本笔记涵盖的内容广泛,旨在帮助学生全面理解C++这门强大的编程语言。 1. **基础语法与数据类型**: - C++的基础包括变量、常量、数据类型(如int、char、float、double等),以及运算符(算术、比较、逻辑等)。...
QT库是C++的一个重要应用框架,尤其在GUI编程中占有重要地位。本教程中的QT案例将涵盖QT的窗口管理、控件使用、信号与槽机制、事件处理等内容,让学习者能够熟练运用QT进行桌面应用开发。同时,源码分析能够帮助学习...