Qt 学习之路 2(51):布尔表达式树模型 豆子 2013年5月15日 Qt 学习之路 2 17条评论 本章将会是自定义模型的最后一部分.原本打算结束这部分内容,不过实在不忍心放弃这个示例.来自于 C++ GUI Programming with Qt 4, 2nd Edition 这本书的布尔表达式树模型的示例相当精彩,复杂而又不失实用性,所以我们还是以这个例子结束这部分内容. 这个例子是将布尔表达式分析成一棵树.这个分析过程在离散数学中经常遇到,特别是复杂的布尔表达式.类似的分析方法可以套…
Qt 学习之路 2(59):使用流处理 XML 豆子 2013年7月25日 Qt 学习之路 2 18条评论 本章开始我们将了解到如何使用 Qt 处理 XML 格式的文档. XML(eXtensible Markup Language)是一种通用的文本格式,被广泛运用于数据交换和数据存储(虽然近年来 JSON 盛行,大有取代 XML 的趋势,但是对于一些已有系统和架构,比如 WebService,由于历史原因,仍旧会继续使用 XML).XML 由 World Wide Web Consortium…
<Qt 学习之路 2>目录 <Qt 学习之路 2>目录  豆子  2012年8月23日  Qt 学习之路 2  177条评论 <Qt 学习之路 2>目录 序 Qt 前言 Hello, world! 信号槽 自定义信号槽 Qt 模块简介 MainWindow 简介 添加动作 资源文件 对象模型 布局管理器 菜单栏.工具栏和状态栏 对话框简介 对话框数据传递 标准对话框 QMessageBox 深入 Qt5 信号槽新语法 文件对话框 事件 事件的接受与忽略 event()…
Home / Qt 学习之路 2 / Qt 学习之路 2(76):QML 和 QtQuick 2 Qt 学习之路 2(76):QML 和 QtQuick 2  豆子  2013年12月18日  Qt 学习之路 2  12条评论 前面我们已经了解了 Qt 的一部分内容.这部分内容全部集中在 C++ 方面.也就是说,至今为止我们的程序都是使用 C++ 语言完成的.这在 Qt 5 之前的版本中是唯一的途径.不过,自从 Qt 5 开始,情况有了变化.事实上,从 Qt 4.7 开始,Qt 引入了一种声明式…
Qt 学习之路 2(67):访问网络(3) 豆子 2013年11月5日 Qt 学习之路 2 16条评论 上一章我们了解了如何使用我们设计的NetWorker类实现我们所需要的网络操作.本章我们将继续完善前面介绍的天气程序. 注意到我们在WeatherDetail类中有一个icon属性.到现在为止我们还没有用到这个属性.下面我们考虑如何修改我们的程序. 通过查看 OpenWeatherMap 的相关 API 我们可以发现,当我们查询天气时会附带这么一个 icon 属性.这个属性其实是网站上的一个天…
Home / Qt 学习之路 2 / Qt 学习之路 2(66):访问网络(2) Qt 学习之路 2(66):访问网络(2)  豆子  2013年10月31日  Qt 学习之路 2  27条评论 上一章我们了解了NetWorker类的简单实现.不仅如此,我们还提到了几个 C++ 开发时常用的设计模式.这些在接下来得代码中依然会用到. 现在我们先来研究下 OpenWeatherMap 的相关 API.之所以选择 OpenWeatherMap,主要是因为这个网站提供了简洁的 API 接口,非常适合示…
Home / Qt 学习之路 2 / Qt 学习之路 2(62):保存 XML Qt 学习之路 2(62):保存 XML  豆子  2013年8月26日  Qt 学习之路 2  9条评论 前面几章我们讨论了读取 XML 文档的三种方法.虽然各有千秋,但是 Qt 推荐的是使用QXmlStreamReader.与此同时,许多应用程序不仅需要读取 XML,还需要写入 XML.为此,Qt 同样提供了三种方法: 使用QXmlStreamWriter: 构造一个 DOM 树,然后掉其save()函数: 使用…
Qt 学习之路 2(60):使用 DOM 处理 XML  豆子  2013年8月3日  Qt 学习之路 2  9条评论 DOM 是由 W3C 提出的一种处理 XML 文档的标准接口.Qt 实现了 DOM Level 2 级别的不验证读写 XML 文档的方法. 与上一章所说的流的方式不同,DOM 一次性读入整个 XML 文档,在内存中构造为一棵树(被称为 DOM 树).我们能够在这棵树上进行导航,比如移动到下一节点或者返回上一节点,也可以对这棵树进行修改,或者是直接将这颗树保存为硬盘上的一个 XM…
Qt 学习之路 2(53):自定义拖放数据 豆子  2013年5月26日  Qt 学习之路 2  13条评论上一章中,我们的例子使用系统提供的拖放对象QMimeData进行拖放数据的存储.比如使用QMimeData::setText()创建文本,使用QMimeData::urls()创建 URL 对象等.但是,如果你希望使用一些自定义的对象作为拖放数据,比如自定义类等等,单纯使用QMimeData可能就没有那么容易了.为了实现这种操作,我们可以从下面三种实现方式中选择一个: 将自定义数据作为QB…
Qt 学习之路 2(49):自定义只读模型 豆子 2013年5月5日 Qt 学习之路 2 18条评论 model/view 模型将数据与视图分割开来,也就是说,我们可以为不同的视图,QListView.QTableView和QTreeView提供一个数据模型,这样我们可以从不同角度来展示数据的方方面面.但是,面对变化万千的需求,Qt 预定义的几个模型是远远不能满足需要的.因此,我们还必须自定义模型. 类似QAbstractView类之于自定义视图,QAbstractItemModel 为自定义模…
Qt 学习之路 2(47):视图选择 豆子 2013年3月28日 Qt 学习之路 2 34条评论 选择是视图中常用的一个操作.在列表.树或者表格中,通过鼠标点击可以选中某一项,被选中项会变成高亮或者反色.在 Qt 中,选择也是使用了一种模型.在 model/view 架构中,这种选择模型提供了一种更通用的对选择操作的描述.对于一般应用而言,Qt 内置的选择模型已经足够,但是,Qt 还是允许你创建自己的选择模型,来实现一些特殊的操作. Qt 使用QItemSelectionModel类获取视图中项…
Home / Qt 学习之路 2 / Qt 学习之路 2(45):模型 Qt 学习之路 2(45):模型  豆子  2013年2月26日  Qt 学习之路 2  23条评论 在前面两章的基础之上,我们将开始介绍 model 的通用概念. 在 model/view 架构中,model 提供一种标准接口,供视图和委托访问数据.在 Qt 中,这个接口由QAbstractItemModel类进行定义.不管底层数据是如何存储的,只要是QAbstractItemModel的子类,都提供一种表格形式的层次结构…
Home / Qt 学习之路 2 / Qt 学习之路 2(44):QFileSystemModel Qt 学习之路 2(44):QFileSystemModel  豆子  2013年2月21日  Qt 学习之路 2  29条评论 上一章我们详细了解了QStringListModel.本章我们将再来介绍另外一个内置模型:QFileSystemModel.看起来,QFileSystemModel比QStringListModel要复杂得多:事实也是如此.但是,虽然功能强大,QFileSystemMo…
Qt 学习之路 2(42):QListWidget.QTreeWidget 和 QTableWidget 豆子 2013年2月5日 Qt 学习之路 2 38条评论 上一章我们了解了 model/view 架构的基本概念.现在我们从最简单的QListWidget.QTreeWidget和QTableWidget三个类开始了解最简单的 model/view 的使用.这部分内容的确很难组织.首先,从最标准的 model/view 开始,往往会纠结于复杂的代码:但是,如果从简单的 QListWidget…
Qt 学习之路 2(41):model/view 架构 豆子 2013年1月23日 Qt 学习之路 2 50条评论 有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中.早期的 Qt 要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表.我们对这个列表进行查找.插入等的操作,或者把修改的地方写回,然后刷新组件进行显示.这个思路很简单,也很清晰,但是对于大型程序,这种设计就显得苍白无力.比如,在一个大型系统中,你的数据可能很大,…
Qt 学习之路 2(32):贪吃蛇游戏(2) 豆子 2012年12月27日 Qt 学习之路 2 55条评论 下面我们继续上一章的内容.在上一章中,我们已经完成了地图的设计,当然是相当简单的.在我们的游戏中,另外的主角便是蛇和食物.下面我们便开始这部分的开发. 我们的地图是建立在QGraphicsScene的基础之上的,所以,里面的对象应该是QGraphicsItem实例.通常,我们会把所有的图形元素(这里便是游戏中需要的对象,例如蛇.食物等)设计为QGraphicsItem的子类,在这个类中添加…
Qt 学习之路 2(30):Graphics View Framework 豆子 2012年12月11日 Qt 学习之路 2 27条评论 Graphics View 提供了一种接口,用于管理大量自定义的 2D 图形元素,并与之进行交互:还提供了用于将这些元素进行可视化显示的观察组件,并支持缩放和旋转.我们通常所说的 Linux 的 KDE 桌面环境,就是建立在 Graphics View 基础之上的(尽管新版本的 KDE 有向 QML 迁移的趋势). Graphics View 框架包含了一套完…
Qt 学习之路 2(22):事件总结 豆子 2012年10月16日 Qt 学习之路 2 47条评论 Qt 的事件是整个 Qt 框架的核心机制之一,也比较复杂.说它复杂,更多是因为它涉及到的函数众多,而处理方法也很多,有时候让人难以选择.现在我们简单总结一下 Qt 中的事件机制. Qt 中有很多种事件:鼠标事件.键盘事件.大小改变的事件.位置移动的事件等等.如何处理这些事件,实际有两种选择: 所有事件对应一个事件处理函数,在这个事件处理函数中用一个很大的分支语句进行选择,其代表作就是 win32…
Home / Qt 学习之路 2 / Qt 学习之路 2(19):事件的接受与忽略 Qt 学习之路 2(19):事件的接受与忽略  豆子  2012年9月29日  Qt 学习之路 2  140条评论 版本: 2012-09-29 2013-04-23 更新有关accept()和ignore()函数的相关内容. 2013-12-02 增加有关accept()和ignore()函数的示例. 上一章我们介绍了有关事件的相关内容.我们曾经提到,事件可以依情况接受和忽略.现在,我们就来了解下有关事件的更多…
Qt 学习之路 2(16):深入 Qt5 信号槽新语法  豆子  2012年9月19日  Qt 学习之路 2  53条评论 在前面的章节(信号槽和自定义信号槽)中,我们详细介绍了有关 Qt 5 的信号槽新语法.由于这次改动很大,许多以前看起来不是问题的问题接踵而来,因此,我们用单独的一章重新介绍一些 Qt 5 的信号槽新语法. 基本用法 Qt 5 引入了信号槽的新语法:使用函数指针能够获得编译期的类型检查.使用我们在自定义信号槽中设计的Newspaper类,我们来看看其基本语法:     1 2…
Home / Qt 学习之路 2 / Qt 学习之路 2(10):对象模型 Qt 学习之路 2(10):对象模型  豆子  2012年9月2日  Qt 学习之路 2  45条评论 标准 C++ 对象模型在运行时效率方面卓有成效,但是在某些特定问题域下的静态特性就显得捉襟见肘.GUI 界面需要同时具有运行时的效率以及更高级别的灵活性.为了解决这一问题,Qt “扩展”了标准 C++.所谓“扩展”,实际是在使用标准 C++ 编译器编译 Qt 源程序之前,Qt 先使用一个叫做 moc(Meta Obje…
Home / Qt 学习之路 2 / Qt 学习之路 2(8):添加动作       [在WINDOWS10 QTCREATOR MENU添加无效]   Qt 学习之路 2(8):添加动作  豆子  2012年8月30日  Qt 学习之路 2  160条评论 本节,我们将在前面主窗口基础之上,添加菜单和工具栏等的动作.虽然 Qt Creator 已经帮我们实现了主窗口的框架代码,但是具体的功能,还是需要我们一行行添加. Qt 使用QAction类作为动作.顾名思义,这个类就是代表了窗口的一个“动…
Home / Qt 学习之路 2 / Qt 学习之路 2(5):自定义信号槽 Qt 学习之路 2(5):自定义信号槽  豆子  2012年8月24日  Qt 学习之路 2  131条评论 上一节我们详细分析了connect()函数.使用connect()可以让我们连接系统提供的信号和槽.但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽.这也是 Qt 框架的设计思路之一,用于我们设计解耦的程序.本节将讲解如何在自己的程序中自定义信号槽. 信号槽不是 GUI…
Q_OBJECT:这是一个宏,凡是定义信号槽的类都必须声明这个宏. 函数tr()全名是QObject::tr(),被他处理过的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用. 对于QT学习之路:Qt学习之路(7):创建一个对话框(上)这个程序.编译出现 invalid use of incomplete type ‘class QPushButton’ findButton->setEnabled(!text.isEmpty()); ^ In file included :, ,…
Qt 学习之路 2归档 http://www.devbean.net/2012/08/qt-study-road-2-catelog/…
  Qt学习之路_14(简易音乐播放器)   Qt学习之路_13(简易俄罗斯方块)   Qt学习之路_12(简易数据管理系统)   Qt学习之路_11(简易多文档编辑器)   Qt学习之路_10(Qt中statusBar,MessageBox和Timer的简单处理)   Qt学习之路_9(Qt中Item Widget初步探索)   Qt学习之路_8(Qt中与文件目录相关操作)   Qt学习之路_7(线性布局和网格布局初步探索)   Qt学习之路_6(Qt局域网聊天软件)   Qt学习之路_5(Q…
Qt 学习之路 2 | DevBean Tech World Qt 学习之路 2 Qt 学习之路 2 目录…
Home / Qt 学习之路 2 / Qt 学习之路 2(74):线程和 QObject Qt 学习之路 2(74):线程和 QObject  豆子  2013年12月3日  Qt 学习之路 2  22条评论 前面两个章节我们从事件循环和线程类库两个角度阐述有关线程的问题.本章我们将深入线程间得交互,探讨线程和QObject之间的关系.在某种程度上,这才是多线程编程真正需要注意的问题.本文很大部分翻译自文档,如果有翻译不当的地方,以文档描述为准. 现在我们已经讨论过事件循环.我们说,每一个 Qt…
Home / Qt 学习之路 2 / Qt 学习之路 2(73):Qt 线程相关类 Qt 学习之路 2(73):Qt 线程相关类  豆子  2013年11月26日  Qt 学习之路 2  7条评论 希望上一章有关事件循环的内容还没有把你绕晕.本章将重新回到有关线程的相关内容上面来.在前面的章节我们了解了有关QThread类的简单使用.不过,Qt 提供的有关线程的类可不那么简单,否则的话我们也没必要再三强调使用线程一定要万分小心,一不留神就会陷入陷阱. 事实上,Qt 对线程的支持可以追溯到2000…
Qt 学习之路 2(72):线程和事件循环 <理解不清晰,不透彻>  --  有需求的话还需要进行专题学习  豆子  2013年11月24日  Qt 学习之路 2  34条评论 前面一章我们简单介绍了如何使用QThread实现线程.现在我们开始详细介绍如何“正确”编写多线程程序.我们这里的大部分内容来自于Qt的一篇Wiki文档,有兴趣的童鞋可以去看原文. 在介绍在以前,我们要认识两个术语: 可重入的(Reentrant):如果多个线程可以在同一时刻调用一个类的所有函数,并且保证每一次函数调用都…