七月 26, 2014 at 2:28 上午
—
Easton
上一章节中我们介绍了如何使用QAction添加动作。其中,我们使用QIcon加载了一张 png 图片。那时候我们使用的是 Qt 资源文件。现在我们来仔细了解下 Qt 的资源系统。
Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果你的程序需要加载特定的资源(图标、文本翻译等),那么,将其放置在资源文件中,就再也不需要担心这些文件的丢失。也就是说,如果你将资源以资源文件形式存储,它是会编译到可执行文件内部。
使用 Qt Creator 可以很方便地创建资源文件。我们可以在工程上点右键,选择“添加新文件&hel...
[更多...]
c273e46a-b48e-4041-a938-387de6ff98a8|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 26, 2014 at 2:23 上午
—
Easton
本节,我们将在前面主窗口基础之上,添加菜单和工具栏等的动作。虽然 Qt Creator 已经帮我们实现了主窗口的框架代码,但是具体的功能,还是需要我们一行行添加。
Qt 使用QAction类作为动作。顾名思义,这个类就是代表了窗口的一个“动作”,这个动作可能显示在菜单,作为一个菜单项,当用户点击该菜单项,对用户的点击做出响应;也可能在工具栏,作为一个工具栏按钮,用户点击这个按钮就可以执行相应的操作。有一点值得注意:无论是出现在菜单栏还是工具栏,用户选择之后,所执行的动作应该都是一样的。因此,Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象...
[更多...]
cd4eb000-c3a1-4a98-a25a-621fd68d69b6|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 26, 2014 at 2:13 上午
—
Easton
前面一篇大致介绍了 Qt 各个模块的相关内容,目的是对 Qt 框架有一个高屋建瓴般的了解。从现在开始,我们将开始尝试使用 Qt 开始新的历程。由于我们已经比较详细地介绍过信号槽的相关内容,因此我们可以用一个新的程序开始进一步的学习,同时对信号槽有一个比较深入的理解。
QMainWindow是 Qt 框架带来的一个预定义好的主窗口类。所谓主窗口,就是一个普通意义上的应用程序(不是指游戏之类的那种)最顶层的窗口。比如你现在正在使用的浏览器,那么主窗口就是这个浏览器窗口。试着回想一下经典的主窗口,通常是由一个标题栏,一个菜单栏,若干工具栏和一个任务栏。在这些子组件之间则是我们的工作...
[更多...]
f3c965ff-9f6b-4e1d-bd1e-4c7863aa5637|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 26, 2014 at 1:04 上午
—
Easton
如果新建一个类,继承了某个类,在这个类的头文件中式没有 Q_OBJECT宏声明的,如果想使用signal-slot信号,就需要添加Q_OBJECT宏,但是添加了这个宏后,就可能会出现这种错误,“undefined reference to vtable for LcdNumber”的编译错误
这是因为在Makefile里面没有这个类并没有Q_OBJECT信息,所以在执行Makefile时候也就没有moc xxx.h这条命令,最终导致连接失败。
知道了这个原因后,解决方法就很简答了,
重新运行qmake,生成Makefile,然后在编译就OK了。
...
[更多...]
de9b94fd-cf66-41c1-9c36-f6c523c6f544|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 25, 2014 at 12:31 上午
—
Easton
Qt 5 与 Qt 4 最大的一个区别之一是底层架构有了修改。Qt 5 引入了模块化的概念,将众多功能细分到几个模块之中。Qt 4 也有模块的概念,但是是一种很粗的划分,而 Qt 5 则更加细化。本节主要对 Qt 5 的模块进行一个简单的介绍,以便以后大家需要哪些功能的时候知道到哪个模块去寻找。
Qt 5 模块分为 Essentials Modules 和 Add-on Modules 两部分。前者是基础模块,在所有平台上都可用;后者是扩展模块,建立在基础模块的基础之上,在能够运行 Qt 的平台之上可以酌情引入。
Qt 基础模块分为以下几个:
Qt...
[更多...]
51abcc4d-d07e-4083-8e2c-fbd0ef375d24|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 25, 2014 at 12:26 上午
—
Easton
上一节我们详细分析了connect()函数。使用connect()可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。这也是 Qt 框架的设计思路之一,用于我们设计解耦的程序。本节将讲解如何在自己的程序中自定义信号槽。
信号槽不是 GUI 模块提供的,而是 Qt 核心特性之一。因此,我们可以在普通的控制台程序使用信号槽。
经典的观察者模式在讲解举例的时候通常会举报纸和订阅者的例子。有一个报纸类Newspaper,有一个订阅者类Subscriber。Subscriber可以订阅Newspaper。这样,...
[更多...]
b6c395da-48fd-43b2-87cb-81e3d8536169|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 25, 2014 at 12:22 上午
—
Easton
信号槽是 Qt 框架引以为豪的机制之一。熟练使用和理解信号槽,能够设计出解耦的非常漂亮的程序,有利于增强我们的技术设计能力。
所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,用自己的一个函数(成为槽(slot))来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。(这里提一句,Qt 的信号槽使用了额外的处理来实现,并...
[更多...]
55f119d1-37b0-4119-8095-1b52e68e0032|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 24, 2014 at 10:28 下午
—
Easton
想要学习 Qt 开发,首先要搭建 Qt 开发环境。好在现在搭建 Qt 开发环境还是比较简单的。我们可以到 Qt 官方网站找到最新版本的 Qt。在 Downloads 页面,可以看到有几个版本的 Qt:Qt SDK、Qt Library、Qt Creator 等等。它们分别是:
Qt SDK:包含了 Qt 库以及 Qt 的开发工具(IDE、i18n 等工具),是一套完整的开发环境。当然,这个的体积也是最大的(Windows 平台大约 1.7G,其它平台大约 780M)。如果仅仅为开发 Qt,建议选择这一项下载安装。安装方法很简单,同普通程序没有...
[更多...]
381213e3-2985-480c-9785-482d8d528d9f|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 24, 2014 at 10:11 下午
—
Easton
Qt 是一个著名的 C++ 应用程序框架。你并不能说它只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件。使用 Qt,在一定程度上你获得的是一个“一站式”的解决方案:不再需要研究 STL,不再需要 C++ 的<string>,不再需要到处去找解析 XML、连接数据库、访问网络的各种第三方库,因为 Qt 自己内置了这些技术。
Qt 是一个跨平台的框架。跨平台 GUI 通常有三种实现策略:
API 映射:API 映射是说,界面库使用同一套 API,将其映射到不同的底层平台上面。大体相当于将不同平台的 API 提取公共部分...
[更多...]
dc120b0f-ed7f-4c6d-accc-7d006b88d941|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT
七月 24, 2014 at 10:04 下午
—
Easton
51CTO 上面曾经有过这么一个系列,具体是 Qt 的入门教程。当时强调过,那些文章大致是根据 《C++ GUI Programming with Qt 4, 2nd Editon》编写的。时过境迁,现在回头看看,已经过去了整整三年。如果你仔细看下那篇系列文章就会发现,发表时间竟然是 2009 年 8 月 20 日;而今天是 2012 年 8 月 20 日。或者是冥冥之中的感觉,竟然选择了同一个时间。
现在,按照年前做过的计划,我会来履行我的承诺,重新修订《Qt 学习之路》。不过,豆子计划将其取名为《Qt学习之路2》,或者就当作是 2.0 版本吧!
从网上的反应来...
[更多...]
0b06a5f7-d4f6-4009-8c17-bc1e51ecd174|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: QT5
Tags: QT