Essential Qt
文章平均质量分 86
一个面向Qt自学者的入门教程,其实都是我自学过程中走过的弯路,希望这个教程能帮别人少走些弯路
加盾男爵
这个作者很懒,什么都没留下…
展开
-
Essential Qt 第二十六章 多线程
多线程是一个很大的范围,内容也非常的多,我手上就有三本总计超过1500页的书讲述多线程的问题,这一章只能演示下Qt对多线程提供的一些支持。多线程有很强的平台相关性,很多时候需要用到各平台的API,这对于移植提出了挑战,而Qt提供的线程相关的类可以在各个平台上使用,对于很多开发者来说,这可以节约很多时间和精力。 本章只讨论Qt的线程的一些类及用法,这里假设你已经对线程有一定的了...原创 2018-04-17 17:43:14 · 494 阅读 · 5 评论 -
Essential Qt 第二十四章 数据显示(四) 使用委托
在前一章里处理了一个用户可能出现的错误,即在年龄这一列的输入了一个非数字时,忽略用户的操作。在有人机交互的程序中,最大的麻烦就是用户无意的操作对数据造成的破坏。数据最大的梦魇并不是来自电影里黑客的攻击,用户无意间的操作对数据的破坏才是最常见,这里错误往往经常性的且没有任何规律的出现,并且极难第一时间发现,排查。 在Qt的模型/视图结构中,额外提供了委托的概念,用于处理...原创 2018-04-14 17:39:05 · 842 阅读 · 0 评论 -
Essential Qt 第二十三章 数据显示(三) 使用自定义模型
在上一章里演示了一个很基础的数据库显示程序,但这个程序存在这不少问题,比如点击一个表名,右侧就会显示对应的表的全部数据,那如果表的数据比较多的话,这个操作就会比较耗时,而在程序读取数据库内容的时候程序会处于卡死状态,无法响应用户的操作,在这个数据爆炸的时代,一张表有个几千万条数据是件很正常的事情,而程序要把这几千万条数据全部读出来就是一项非常浩大的工程了,很多时候读取这么大的数据是个非常不明智...原创 2018-04-13 18:14:54 · 1298 阅读 · 0 评论 -
Essential Qt 第二十二章 数据显示(二) 模型/视图
在前一章里提到咯模型/视图的概念,其实就是将数据和显示分开,这样在处理不同结构类型的数据时有着极大的方便。这一章将主要演示模型/视图结构带来的便利。 如果对于模型/视图没有任何的概念,也没有任何关系,这一章将通过一个例子演示下模型与视图的关系。这个例子将会用到前面有关数据库的内容,这里任然使用sqlite3作为例子。 这是一个很简单的数据库查看软件,通过...原创 2018-04-12 13:09:58 · 362 阅读 · 0 评论 -
Essential Qt 第二十一章 数据显示(一) 项/视图类
在二十章里,简单的介绍了用于数据库连接的类,QSqlDatabase和QSqlQuery,通过这两个类可以有效的和数据库连接,然后通过sql语句才对数据库进行各种操作,但这里这里忽略了一个问题,如何向用户显示这些数据库中的数据/如何让用户对这些数据进行添加改删?这些操作可以用过sql语句来实现,但显然我们不能要求每个程序的用户都能熟练的使用sql语句,假设你设计了一个用于医院的病人管理系统,你...原创 2018-04-07 17:55:26 · 344 阅读 · 0 评论 -
Essential Qt 第二十一章 本地目录
Qt提供了一套操作本地目录以及文件的类,是的开发者可以在不了解系统api的情况下来操作系统本地的目录以及文件,这对于开发者来说是一件很让人欣慰的事情,对于一名开发这来说学习一个系统的api是一项浩大的工程,无论是windows还是linux或者unix或者其他什么系统,这些系统的api往往数量庞大,需要花费大量的时间去学习研究,而Qt则可以让我们省去很多的时间,我们甚至可以在完全不知道...原创 2018-03-31 10:55:44 · 239 阅读 · 0 评论 -
Essential Qt 第一章 Hello Qt
很多编程都是从HelloWorld开始第一个程序的,我们就从Hello Qt开始#include#includeint main(int argc , char** argv){ QApplication app(argc,argv); QLabel* label = new QLabel("Hello Qt"); label->show(); return app.exe原创 2017-03-09 20:03:03 · 540 阅读 · 0 评论 -
Essential Qt 第二章 界面布局
Qt的界面布局相对比较简单,虽然从代码角度来说可能有些长,但其实要理解他并不困难。 Qt的界面主要依赖2个布局管理器,分别是QHBoxLayout和QVBoxLayout这两个类,用于水平方向和垂直方向上的界面布局,通过这两个界面布局管理器和弹簧,我们可以应付绝大多数的场景,当然Qt还有很多用于界面布局的类,这些类主要用于一些特殊或者精确布局上,我会在以后用到的时候再分析 第一原创 2017-03-09 20:03:05 · 324 阅读 · 0 评论 -
Essential Qt 第三章 信号与槽
还记得第一章的Hello Qt程序吗,不知道你有没有用QPushButton来代替QLabel来重新实现这个程序,因为这一章需要用到这个 在正式讨论信号与槽之前,我们先简单的讨论一个问题,在界面中,有很多结束/关闭的选项,点击一下程序就结束了,在Qt中,也有类似的情况,比如我点击一个按钮,整个程序就结束了,放在代码的角度来说,有一个类,当我执行他的一个成员函数(点击了这个按钮),另一原创 2017-03-09 20:03:08 · 356 阅读 · 0 评论 -
Essential Qt 第三章 搜寻对话框
对于大多数window7/10等win用户来说,windows自带的记事本程序再熟悉不过了,他提供了最基本的文本编辑功能,接下来几章我们将制作一个类似的程序,整个程序相对(之前几章的例子)比较大,所以我们先从他的一个对话框开始。 这是一个查询对话框,和windows记事本的对话框很相似,这个对话框中除了前面章节已经介绍过的QLabel和QPushButton外,还使用了 QL原创 2017-03-09 20:03:11 · 383 阅读 · 0 评论 -
Essential Qt 第四章 记事本(一)
接下来的几章将介绍如何制作在上一章提到的window记事本程序,这个程序本身并不复杂,但因为为需要穿插介绍一些其他内容,所以这个过程会显得比较长。在这一章里将先演示窗体的制作。 我们先把程序的界面做好,完成后的程序应该是这个样子的 这个窗体使用了QMainWindow,这个窗体最大的作用特点就是提供了菜单栏,工具栏,状态栏等常见的窗体元素,你也可以依据需要原创 2017-03-09 20:03:14 · 389 阅读 · 0 评论 -
Essential Qt 第五章 记事本(二)简单事件处理
这一章里出要会把前两章制作的2个窗体合并为一个程序,这里需要我们手动修改一个关闭事件,在Qt编程中,事件是一个很重要的部分,后面将会一单独的章节来详细讲述,但应为这个程序就会用到,所以在这一章简单的介绍下。 事件(event)是由窗口系统或者Qt自身产生,用以响应所发生的各类事情。就如第一章里的使用到的窗部件QPushButton,当鼠标(左键或右键)点击就会触发这个窗体的mo原创 2017-03-09 20:03:16 · 340 阅读 · 0 评论 -
Essential Qt 第六章 记事本(三)添加图片,工具栏,状态栏与快捷键。
在有图像界面的程序中,添加一些图片是很常见的事,这些图片可以作为log,背景等,而在这里演示的是将一些图片添加到菜单中,并作为工具栏的内容。 Qt中使用一种qrc格式的文件来作为添加资源的文件,注意这里是添加的资源不限于图片,其他音频视频也可以这样添加。具体步骤: 1.在程序目录下新建一个images的子文件目录,然后将需要的图片放入这个子目录呢原创 2017-03-09 20:03:19 · 604 阅读 · 0 评论 -
Essential Qt 第七章 记事本(四)实现编辑菜单功能
前面完成了记事本程序的界面制作,这一章将来实现这个程序的编辑菜单上的各项功能。我们使用QTextEdit来作为记事本程序的中心窗体,这里有一个很大的便利就是QTextEdit提供了很多和编辑有关的函数,槽等,在需要的时候只需要直接调用即可,其中,撤销,恢复,复制,粘帖,剪切,全选在QTextEdit均有对应的槽来实现其功能,我们要做的就是把编辑菜单上的动作(QAction)和这些槽连接起来即可,在原创 2017-03-09 20:03:22 · 446 阅读 · 0 评论 -
Essential Qt 第八章 记事本(五)实现格式菜单功能
这一章将完成记事本程序里的“格式”菜单里的各项功能,第一个要完成的是“自动换行”,这个功能QTextEdit有个成员函数setLineWrapMode()可以实现这个功能,但问题是这里要求菜单上的”自动换行“是个单选框,QAction的成员函数setCheckable()提供了这个功能,与之对应的是isChecked()这个函数,他返回一个布尔值,用于表示QAction...原创 2017-03-09 20:03:25 · 845 阅读 · 0 评论 -
Essential Qt 第九章 内存管理
前面连续几章制作了一个记事本(ReadMe)程序,当然并没有完成所有的功能。作为一名C++程序员,不知道你有没有注意到一个问题,在这个程序中有个类ReadMe,在类的构造函数中使用了大量的new来创建对象,然而这些构造函数中的new却找不到对应的delete,事实上这个类根本就没有析构函数。如果你有这样的疑惑,很好。。。。因为这对于C++程序员来说很正常。 Qt提供了一套原创 2017-03-09 20:03:28 · 300 阅读 · 0 评论 -
Essential Qt 第十章 事件
在记事本程序ReadMe中,为了将查询对话框更好的安装到主程序中,修改了对话框的关闭事件,使得用于关闭对话框的时候,对话框只是隐藏,而不是真正的关闭。这只是对Qt中有关事件的运用的一小部分,Qt的事件(类)都继承自QEvent,查询Qt助手可以在文档发现,这个类提供了超过一百种Qt事件的支持,查询对话框中使用到的关闭时间也包含其中,这一章将通过几个例子详细说明事件的使用等。原创 2017-03-09 20:03:31 · 266 阅读 · 0 评论 -
Essential Qt 第十一章 事件的运用
这一章将通过一个完成一个完成的程序,这个程序将会运用到多个事件。这个程序被命名为TitleWidget.在界面程序中,滚动播放一些文字非常常见,而这个程序的最用将是能滚动播放默认的字符或输入的文本,完成后大概是这个样子其中的文字在从左到右不断的循环滚动播出。要实现这个程序,至少要用到3个事件,都是到目前尚未接触到的事件,先看程序头文件TitleWidget.h#ifndef TITLEWIDGET原创 2017-03-09 20:03:33 · 461 阅读 · 0 评论 -
Essential Qt 第十二章 文本文件的读写
在C/C++语言中,有一大堆关于本地文件读写的函数,比如C语言提供了至少30个以上的IO函数来支持文件的读写,而C++则使用fstream等类来完成,当然关于C++的IO相关部分足可以写出好几部大头书。在Qt中也提供了很多和文件读写相关的IO类,这里只能简单的介绍其中的一小部分。关于文件,window下区分文本文件和二进制文件,而linux下则不做区分,而Qt为了则提供了QTextStream和Q原创 2017-03-09 20:03:36 · 411 阅读 · 0 评论 -
Essential Qt 第十三章 文件拖放
这一章,将实现ReadMe程序的最后一个功能,即文件的脱放,想ReadMe这样的编辑器,通过把一个文件拖放至窗体内来实现文件的打开是一个很常见的操作模式,Qt对这一操作做了比较细致的区分,最主要的是通过拖事件dropEnterEvent()以及放事件dragEvent(),除此意外,Qt还提供了dragMoveEvent()和dragLeaveEvent()来应对一些特殊情况或者一些细致的控制,当原创 2017-03-15 17:32:43 · 514 阅读 · 0 评论 -
Essential Qt 第十四章 事件过滤器
void getInstruction(){ emit thisStruction(tr("infos..."));} 在前面的章节里简单的介绍了Qt的几个事件,这里介绍一个和事件相关的东西:事件过滤器,这个。。。。。暂且称为“东西”的作用就是过滤事件,简单的来说,假如一个对话框(QDialog)上面放了10个QPushButton,当鼠标点击其中一个按钮的时原创 2017-06-20 21:35:41 · 503 阅读 · 0 评论 -
Essential Qt 第十五章 绘图事件
前面简单的演示了Qt的几个事件,其中包括了绘图事件,而这里则比较详细的讲下绘图事件 在现实世界里,如果你需要画一幅图画,你要进行三个步骤,第一,准备画图的工具,画笔,画刷之类的,第二,选择画图的位置,你打算画在纸上,课桌上还是大街的墙上,第三,画你想画的内容,你打算画一些直线曲线来表达你的抽象思维,还是绘制彩色区域,或则直接写上一些你喜欢的文字。通过这三个步骤你就可以在你想要的地方画原创 2017-12-02 11:43:07 · 523 阅读 · 0 评论 -
Essential Qt 第十六章 元素/场景
对于一般的窗体/图像的修改,可以使用前一章介绍的绘图以及绘图事件,但这种绘制通常用于比较少的绘制,对于需要大量并且复杂的图像绘制会往往会先的力不从心,下面是一张来自Qt自带的例子的截图 这是Qt一个有关图表制作的例子,类似上面的图像比较复制,对于这样的情况使用绘图来直接绘制会非常的繁琐,有时候甚至会无法完成,对于这样的情况,Qt提供了另一种解决绘图的方案------项原创 2017-12-10 13:02:02 · 407 阅读 · 0 评论 -
Essential Qt 第十七章 贪吃蛇(上)
上一章里简单介绍了元素/场景结构,接下来两张将会用这个架构来制作一个完整的程序------贪吃蛇,详细大家都玩过,至少知道这个游戏,在智能手机出现前,这个游戏几乎是所有手机的标配游戏,而今天将会介绍下如何利用前面介绍的元素/场景架构来实现这个程序,首先看下程序的大概样子 先简单的分析下游戏的结构,最主要的是蛇和食物,这里绿色的蛇使用QGraphicsRectItem原创 2017-12-16 11:44:32 · 587 阅读 · 0 评论 -
Essential Qt 第十八章 贪吃蛇(下)
前一章制作了贪吃蛇游戏的框架,只是实现了一些基本功能,而这一在会进一步完善程序所需要的各项功能,首先看下程序完成后的样子 相较于前一章,个程序添加了一个难度选择框,一个信息显示框,以及三个按钮用于控制游戏的各项功能,对比前一章的程序,这个程序主要多了以下功能 1 游戏结束后可以新建游戏 2 提供难原创 2017-12-17 16:02:06 · 398 阅读 · 0 评论 -
Essential Qt 第十九章 子类化QGraphicsItem
前面两章通过元素/视图架构完成了一个贪吃蛇游戏,但这个游戏还有些不粗,首先,游戏以吃到10个食物为胜利条件,而在游戏中用户却不知道游戏到底进行到哪一步了,其次,游戏的界面有些单调,比如蛇的身体,如果有些色彩会好看不少,所以对上上一章的游戏做些改进,大致上回事下面这个样子 从图上可以看出,每个食物上多了一个数字,这样可以提示用户游戏的精度,同时蛇的身体有了色彩上的变化原创 2017-12-23 15:44:25 · 720 阅读 · 0 评论 -
Essential Qt 第二十章 数据库
对于编程而已,数据库操作是一个非常常见的内容,Qt提供了目前大多主流数据库的支持,这一章将以sqlite3为例,演示下Qt与数据库相关的基本内容,另外这里假设读者已经熟悉sqlite3的操作以及SQL语言。 以sqlite3为例,如果需要操作数据库的内容,基本的操作可以分成两个部分,第一,连接数据库,第二,操作数据库(如使用SELE...原创 2017-12-24 13:46:31 · 415 阅读 · 0 评论