初学Qt(一)

如果是一个小白,那么该如何学习Qt呢?接下来我从自己的学习经历中总结一下,希望对初学Qt的同志能有一点儿帮助。

一、初识Qt——信号和槽、跨平台开发框架

首先要知道的是Qt是基于C++的跨平台应用程序开发框架,所谓跨平台就是你在Windows下写的程序放在Linux下也能用,而且图形化风格也会随着系统的改变而改变。此外它拥有大量的组件,以方便和加速开发过程,如它的IDE(集成开发环境)—— Qt Creator、Qt Designer、Qt Assistant等,还有很多,不一一列举。除此之外,提到Qt我们可能最先想到的就是信号和槽——它为我们提供了一种方便对象间通讯的机制。举个例子,你的应用程序界面有个按钮,你想让它在被按下后弹出一个Qt入门程序Demo与讲解的对话框,

可能对于初学者而言还是有点蒙圈,不过没关系,现在知道Qt能跨平台、有一个独特的信号和槽的机制就可以了。

二、应用程序类型与三大界面基类

Qt开发环境搭建完成后,我们会建立自己的工程(工程就是Qt会把预处理、编译、汇编、链接等工作搞定),之后写下第一个关于Qt的程序。在创建工程这块,我要说的是要了解Qt提供的一些模板:如左侧第一个默认的是应用程序,第二个是创建库模板。在右侧,创建应用程序可以是窗体程序或是控制台程序(没有图像化界面),其他的类型没有使用过,不做介绍。如果左侧选择的是Library模板,对应右侧会是不同的选项。

以我们常用的应用程序和窗体程序为例,必须要继承三大基类中的一个。他们分别是QMainWindow、QWidget、QDialog。MainWindow带有菜单条,工具条和一个状态条的主应用程序窗口;Widget是所有用户界面对象的基类,窗口部件是用户界面的一个基本单元 ;Dialog是对话框窗口的基类,对话框窗口主要用于短期任务和用户进行短期通讯的顶级窗体。下方Generate form默认是勾选的,也就是创建.ui文件。不是很懂?没关系,每次建工程都会选,选着选着就会有感情了。

三、Qt控件概述与应用举例

Qt的控件有很多很多,直到现在我也有很多没有用过。说到这,提一下,我们可以使用Qt Designer的快速设计和布局各种窗体部件,也可以使用纯代码进行窗体设计。初学者建议先使用Designer进行设计。

开启PPT模式:

Layouts:布局器,垂直、水平、栅格布局等方式

Buttons:各种按钮,单选按钮、多选按钮、对话框按钮等

Item Views:Qt Model/View的显示部分,列表、树、表格等,使用时需要通过Model设置数据源

Item Widgets:Model/View的简便类,可直接进行增删改查等功能

Containers:容器,很常用。。。常用到可能会单独说一说。

Input Widgets:输入窗体,可以自己继承里面的Plain Text Edit或Text Edit控件自己实现一个文本编辑器

Display Widgets:显示窗体。

这块通过一个小Demo串几个知识点:信号和槽,控件的简单使用,如何根据自己的功能去查找文档以及有一点难度的应用。总共三小部分:

①点击一个按钮,弹出一个标题为“闲鱼搜索”的通知对话框,

对话框为HTML样式的“Qt入门程序与Demo讲解!!!”。这个是通

过信号和槽实现的。

②Input Widgets下的lineEdit,通过Qt帮助文档查找一些信号和槽。

Linux 下Qt Assistant 在Qt安装目录/opt/Qt5.5.1/5.5/gcc/bin下

③lineEdit本身没有鼠标点击焦点的信号发出,我想在编辑框被点

击时得到信号,该如何操作?

①打个广告。。

这里面可以设置HTML样式的显示。

 QMessageBox::information(this,tr("闲鱼搜索"),
                             tr("<font color=red><h2>Qt入门程序
与Demo讲解!!!</h2></font>")) ;

②lineEdit 帮助文档阅读

紫色部分是该类需要包含的头文件、模块以及它的基类

点击上边图片那个More,找到了几个信号,我们试一下。这里面提下,Qt调试信息输出需要包含QDebug类,使用qDebug()输出。我们看到字符改变会立即将信号传递到槽中输出,按下回车键后对应的槽也进行了响应。挺好玩的。

③如何获取点击lineEdit编辑框的通知(定制自己想要的功能)

lineEdit编辑框被点击时是没有信号发出的,若想得到这个通知,有两种方式:

一是继承QLineEdit,自己重新实现鼠标点击事件,二是使用事件过

滤器。下面我们以事件过滤器为例:

lineEdit安装事件过滤器,重新实现eventFilter(QObject

*watched, QEvent *event)。打印下结果如下图:

本文分享自微信公众号 - Pou光明(pou0230)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券