- 浏览: 112725 次
- 性别:
- 来自: 北京
文章分类
最新评论
C++ GUI Qt4编程--阅读笔记(原创)
- 博客分类:
- C\C++
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 1013编写: 王宇 2017-12-14 一 新标准 ... -
单链表归并排序
2016-09-30 16:20 513单链表归并排序-O(nlogn) 由 王宇 ... -
单链表的增、删、改、查
2015-05-22 11:57 675单链表的增、删、改、查(原创) 由 ... -
Unix 网络编程_阅读笔记四 线程、客户/服务器程序设计范式
2015-03-05 17:32 791Unix 网络编程_阅读笔记 四 (Socket高级篇之线 ... -
Unix 网络编程_阅读笔记三 广播、多播、UDP套接字、信号驱动式I/O
2015-03-05 16:10 1542Unix 网络编程_阅读笔 ... -
Unix 网络编程_阅读笔记二 守护进程和高级I/O
2015-03-05 15:25 947Unix 网络编程_阅读笔记 二 (Socket高级篇之守 ... -
Unix 网络编程_阅读笔记一 Socket基础篇
2015-02-10 17:01 964Unix 网络编程(阅读笔记 一Socket基础篇) - ... -
在C语言环境下,编写自己的Vector容器。
2014-04-28 17:22 6776在C语言环境下,编 ... -
红红纪念日记录器(原创)
2014-04-04 14:17 1098红红纪念日记录器(原创) ... -
深度探索C++对象模型-- Data 语意学(阅读笔记)(原创)
2014-02-18 16:05 1418深度探索C++对象模型(阅读笔记)(原创) Inside ... -
深度探索C++ 对象模型--构造函数语意学(阅读笔记)(原创)
2013-10-10 16:17 1272深度探索C++ 对象模型(阅读笔记)(原创) Insid ... -
深度探索C++ 对象模型--关于对象(阅读笔记)(原创)
2013-09-26 15:07 1514... -
eSpeak 安装部署记录(原创)
2013-04-22 16:13 3549eSpeak安装部署记录(原创) 由 ... -
基础算法总结(原创)
2012-07-12 21:13 963基 础 算 法 总 结(原创) 由 王宇 ... -
C++ Template--阅读笔记(原创)
2012-05-26 21:45 1368由 王宇 原创并发布 : 第2章函数模板 ... -
C缺陷和陷阱--阅读笔记(原创)
2012-05-26 21:27 1051由 王宇 原创并发布 : 第1章词法陷阱 ... -
Effective C++--阅读笔记(原创)
2012-05-26 21:06 1259由 王宇 原创并发布 ...
相关推荐
《C++ GUI Qt4 编程(第二版)》2.4改变形状的对话框 练习源码
这是我学习Qt编程以来,按照书中例子自编的程序以及自己理解加上的注释
《C++.GUI.Programming.with.Qt.4》读书笔记
牛人学习C++ GUI Programming with Qt 的心得,非常推荐初学者看
QT教程,详细的介绍了QT的使用,是学习QT的最佳学习笔记
C++ GUI.Programming Qt 4 的读书笔记 很不错的说 C++ GUI.Programming Qt 4 的读书笔记 很不错的说
笔记扫描版本
笔记扫描版本
6 uic的使用《C++ GUI Qt 4编程(第二版)》第17页使用QT设计师设计了一个界面,界面设计完成后,需要把ui文件转换成C++的头文件,这个转换使用
《C++ GUI Qt 4 编程(第二版)》中文版 (C++.GUI.Programming.with.Qt.4).读书笔记
2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整...
Qt4入门中文版 Qt学习之路· Qt学习笔记--图形视图框架 QT中文手册 C++ GUI Programming with Qt 4 中文版(第一章至第十章)目录版
本人根据网上资源整理。 也就是把 暗恋的滋味的csdn博客 上面那些给弄到chm里了,方便大家学习,希望原文作者不要介意
t是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。本教程深入浅出,是学习QT的最佳助手。
Qt本身并不是一种编程语言,它本质上是一个跨平台的C++开发类库,是用标准C++编写的类库,它为开发GUI应用程序和非GUI应用程序提供了各种类。 Qt对标准C++进行了扩展,引入了一些新概念和功能,例如信号和槽、对象...
sys-netcheat-gui一个基于Qt的的体面(但有点bug)接口用法阅读sys-netcheat的自述文件,您将获得它笔记尝试搜索非常常见的值(主要是0x0-0x10)通常会导致崩溃搜索可能需要一段时间,尤其是在大型游戏中。...
风扇组Qt描述最大 Acer 风扇速度 - GUI 应用程序警告:这是未经测试的软件,就作者而言,它会将魔法值写入您笔记本电脑上的未知端口。 这很容易导致您的设备变砖。 使用风险自负,运行前请务必阅读源代码! 这只测试...
快速笔记 这是一个简单的GUI,用于以强调短笔记(列表形式)的方式来做笔记。 注释可以保存到文本文件或从一个文件导入。 注释也可以突出显示,编辑和删除。 例子
我已经熟悉C ++,但想扩展到GUI编码。 我选择做一个记事本/绘画混合体,因为我经常使用Post-It笔记,而让我可以快速书写和绘画的想法是我感兴趣的。 #什么该存储库包含用于创建程序的所有文件,它们位于恰当命名的...
qgit,一个git GUI查看器使用qgit,您将能够以图形方式遵循不同的开发分支来浏览修订历史记录,查看补丁内容和更改的文件。 错误或功能请求应发送至邮件列表。主要特点查看修订,差异,文件历史记录,文件注释,存档...