QT
QT
杨林伟
像火箭科学家一样思考!
展开
-
34 QT - 聊天案例
1. 新建项目1.1 创建新项目第一步打开Qt Creator,点击新建NewProjectApplication –> Qt Widgets Application -> choose创建项目名称例如: MyselfQQ,路径自己选择,注意不要有空格和中文选择套件,点击下一步选择基类QWidget,然后点击下一步然后点击完成,至此项目创建完毕。2. 创建对话列...原创 2019-10-18 16:51:46 · 1414 阅读 · 2 评论 -
33 QT - 文本文件读写
上一节我们介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用QTextStream类。QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理...原创 2019-10-18 16:31:10 · 365 阅读 · 0 评论 -
32 QT - 二进制文件读写
QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流’完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以不经过任何处理,直接拿到运行了 Solaris 的 SPARC 机器上读取。由于数据流就是二进制流,因此我们也可以直接读写没有编码的二进制数据,例如图像、视频、音频...原创 2019-10-18 16:25:44 · 702 阅读 · 0 评论 -
31 QT - 基本文件操作
文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。在所有的 I/O 设备中,文件 I/O 是最重要的部分之一。因为我们大多数的程序依旧需要首先访问本地文件(当然,在云计算大行其道的将来,这一观点可能改变)。QFile提供了从文件中读取和写入数据的能力。我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName...原创 2019-10-18 16:21:43 · 270 阅读 · 0 评论 -
30 QT - 文件系统概述
文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类图(Qt5):QIODevice: 所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;QFileDevice: Qt5新增加的类,提供了有关文件操作的通用实现。QFlie: ...原创 2019-10-18 16:18:27 · 355 阅读 · 0 评论 -
29 QT - 绘图设备
绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。其中:QPixmap专门为图像在屏幕上的显示做了优化QBitmap是QPixmap的一个子类,它的色深限定为1,可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。QImage专门为图像的像...原创 2019-10-18 16:15:24 · 498 阅读 · 0 评论 -
28 QT - QPainter
Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。QPainter用来执行绘制的操作;QPaintDevice是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPainter工作的空间;QPaintEngine提供了画笔(QPainter)在不同的设...原创 2019-10-18 16:10:27 · 327 阅读 · 0 评论 -
27 QT -消息机制与事件总结
Qt 的事件是整个 Qt 框架的核心机制之一,也比较复杂。说它复杂,更多是因为它涉及到的函数众多,而处理方法也很多,有时候让人难以选择。现在我们简单总结一下 Qt 中的事件机制。Qt 中有很多种事件:鼠标事件、键盘事件、大小改变的事件、位置移动的事件等等。如何处理这些事件,实际有两种选择:1.所有事件对应一个事件处理函数,在这个事件处理函数中用一个很大的分支语句进行选择,其代表作就是 win3...原创 2019-10-18 16:08:02 · 322 阅读 · 0 评论 -
26 QT - 事件过滤器
有时候,对象需要查看、甚至要拦截发送到另外对象的事件。例如,对话框可能想要拦截按键事件,不让别的组件接收到;或者要修改回车键的默认处理。通过前面的章节,我们已经知道,Qt 创建了QEvent事件对象之后,会调用QObject的event()函数处理事件的分发。显然,我们可以在event()函数中实现拦截的操作。由于event()函数是 protected 的,因此,需要继承已有类。如果组件很多,...原创 2019-10-18 16:03:46 · 270 阅读 · 0 评论 -
25 QT - event函数
事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler)。如上所述,event()函数主要用于事件的分发。所以,如果你希望在事件分发之前做一些操作,就可以重写这个event()函数了。例如,我们希望在一个QWidget组件中监听 tab 键的按下...原创 2019-10-18 16:00:13 · 537 阅读 · 0 评论 -
24 QT - 事件
事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。在前面我们也曾经简单提到,Qt 程序需要在main()函数创建一个QApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。...原创 2019-10-18 15:56:58 · 370 阅读 · 0 评论 -
23 QT - 自定义控件
在搭建Qt窗口界面的时候,在一个项目中很多窗口,或者是窗口中的某个模块会被经常性的重复使用。一般遇到这种情况我们都会将这个窗口或者模块拿出来做成一个独立的窗口类,以备以后重复使用。在使用Qt的ui文件搭建界面的时候,工具栏栏中只为我们提供了标准的窗口控件,如果我们想使用自定义控件怎么办?例如:我们从QWidget派生出一个类SmallWidget,实现了一个自定窗口// smallwidge...原创 2019-10-18 15:52:30 · 339 阅读 · 0 评论 -
22 QT - QLineEdit
Qt提供的单行文本编辑框1. 设置/获取内容获取编辑框内容使用text(),函数声明如下:QString text() const设置编辑框内容void setText(const QString &)2.设置显示模式使用QLineEdit类的setEchoMode () 函数设置文本的显示模式,函数声明:void setEchoMode(EchoMode mode)...原创 2019-10-18 15:39:20 · 758 阅读 · 0 评论 -
21 QT - QLabel控件使用
QLabel是我们最常用的控件之一,其功能很强大,我们可以用来显示文本,图片和动画等。1. 显示文字 (普通文本、html)通过QLabel类的setText函数设置显示的内容:void setText(const QString &)可以显示普通文本字符串QLable *label = new QLable;label->setText(“Hello, World!”...原创 2019-10-18 15:35:04 · 1905 阅读 · 0 评论 -
20 QT - 布局管理器概述
所谓 GUI 界面,归根结底,就是一堆组件的叠加。我们创建一个窗口,把按钮放上面,把图标放上面,这样就成了一个界面。在放置时,组件的位置尤其重要。我们必须要指定组件放在哪里,以便窗口能够按照我们需要的方式进行渲染。这就涉及到组件定位的机制。Qt 提供了两种组件定位机制:绝对定位和布局定位。绝对定位就是一种最原始的定位方法:给出这个组件的坐标和长宽值。这样,Qt 就知道该把组件放在哪里以及...原创 2019-10-18 15:25:19 · 316 阅读 · 0 评论 -
19 QT - 标准文件对话框
QFileDialog,也就是文件对话框。在本节中,我们将尝试编写一个简单的文本文件编辑器,我们将使用QFileDialog来打开一个文本文件,并将修改过的文件保存到硬盘。首先,我们需要创建一个带有文本编辑功能的窗口。借用我们前面的程序代码,应该可以很方便地完成:openAction = new QAction(QIcon(":/images/file-open"),tr("&Open...原创 2019-10-18 15:23:33 · 646 阅读 · 0 评论 -
18 QT - 消息对话框
QMessageBox用于显示消息提示。我们一般会使用其提供的几个 static 函数:显示关于对话框void about(QWidget * parent, const QString & title, const QString & text)这是一个最简单的对话框,其标题是 title,内容是 text,父窗口是 parent。对话框只有一个 OK 按钮。显示关于 ...原创 2019-10-18 15:20:42 · 1187 阅读 · 0 评论 -
17 QT - 自定义消息框
Qt 支持模态对话框和非模态对话框。模态与非模态的实现:使用QDialog::exec()实现应用程序级别的模态对话框使用QDialog::open()实现窗口级别的模态对话框使用QDialog::show()实现非模态对话框。模态对话框Qt 有两种级别的模态对话框:应用程序级别的模态当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中...原创 2019-10-18 15:12:40 · 484 阅读 · 0 评论 -
16 QT - 标准对话框
所谓标准对话框,是 Qt 内置的一系列对话框,用于简化开发。事实上,有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等。这些对话框在所有程序中几乎相同,因此没有必要在每一个程序中都自己实现这么一个对话框。Qt 的内置对话框大致分为以下几类:QColorDialog: 选择颜色;QFileDialog: 选择文件或者目录;QFontDialog: 选择字体;QInput...原创 2019-10-18 15:03:49 · 372 阅读 · 0 评论 -
15 QT - 对话框QDialog概述
对话框是 GUI 程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt 中使用QDialog类实现对话框。就像主窗口一样,我们通常会设计一个类继承QDialog。QDialog(及其子类,以及所有Qt::Dialog类型的类)的对于其 parent 指针都有额外的解释:如果 ...原创 2019-10-18 15:02:35 · 870 阅读 · 0 评论 -
14 QT - QMainWindow
QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。1. 菜单栏一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。创建菜单栏,通过...原创 2019-10-18 14:59:32 · 347 阅读 · 0 评论 -
13 QT - Lambda表达式
C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。首先看一下Lambda表达式的基本构成:[capture](parameters) mutable ->return-type{statement}[函数对象参数](操作符重载函数参数)mutable ->返回值{函数体}1. 函数对象参数[],标识一个Lambda的开始,这部分必须存在,不能...原创 2019-10-18 14:52:09 · 331 阅读 · 0 评论 -
12 QT - Qt4版本的信号槽写法
connect(zt,SIGNAL(hungry(QString)),st,SLOT(treat(QString)));这里使用了SIGNAL和SLOT这两个宏,将两个函数名转换成了字符串。注意到connect()函数的 signal 和 slot 都是接受字符串,一旦出现连接不成功的情况,Qt4是没有编译错误的(因为一切都是字符串,编译期是不检查字符串是否匹配),而是在运行时给出错误。这无疑...原创 2019-10-18 14:48:42 · 888 阅读 · 0 评论 -
11 QT - 信号槽的拓展
一个信号可以和多个槽相连如果是这种情况,这些槽会一个接一个的被调用,但是它们的调用顺序是不确定的。多个信号可以连接到一个槽只要任意一个信号发出,这个槽就会被调用。一个信号可以连接到另外的一个信号当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。槽可以被取消链接这种情况并不经常出现,因为当一个对象delete之后,Qt自动取消所有连接到这...原创 2019-10-18 14:41:36 · 322 阅读 · 0 评论 -
10 QT - 自定义信号和槽
使用connect()可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。下面我们看看使用 Qt 的信号槽:首先定义一个学生类和老师类: 老师类中声明信号 饿了 hungrysignals: void hungury(); 学生类中声明槽 请客 treat public slots: ...原创 2019-10-18 14:40:00 · 1146 阅读 · 0 评论 -
09 QT - 信号和槽机制
信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类...原创 2019-10-18 14:37:47 · 286 阅读 · 0 评论 -
08 QT - Qt窗口坐标体系
坐标体系:以左上角为原点(0,0),X向右增加,Y向下增加。对于嵌套窗口,其坐标是相对于父窗口来说的。原创 2019-10-18 14:33:14 · 387 阅读 · 0 评论 -
06 QT - 按钮创建
在Qt程序中,最常用的控件之一就是按钮了,首先我们来看下如何创建一个按钮QPushButton * btn = new QPushButton; 头文件 #include <QPushButton> //设置父亲 btn->setParent(this); //设置文字 btn->setText("德玛西亚"); //移动位置 ...原创 2019-10-18 14:26:13 · 286 阅读 · 0 评论 -
05 QT - 一个最简单的Qt应用程序
main入口函数中#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}解释:Qt系统提供的标准类名声明头...原创 2019-10-18 14:23:33 · 511 阅读 · 0 评论 -
04 QT - .pro文件
在使用Qt向导生成的应用程序.pro文件格式如下:QT += core gui //包含的模块greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于Qt4版本 才包含widget模块TARGET = QtFirst //应用程序名 生成的.exe程序名称TEMPLATE = app //模板类型 应用程序模板...原创 2019-10-18 14:19:24 · 510 阅读 · 0 评论 -
03 QT - 创建QT项目(手动的方式)
添加一个空项目选择【choose】进行下一步。设置项目名称和路径 —> 选择编译套件 --> 修改类信息 --> 完成(步骤同上),生成一个空项目。在空项目中添加文件:在项目名称上单击鼠标右键弹出右键菜单,选择【添加新文件】弹出新建文件对话框...原创 2019-10-18 14:14:25 · 408 阅读 · 0 评论 -
02 QT - 创建QT项目(向导的方式)
1. 使用向导创建打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项弹出New Project对话框,选择Qt Widgets Application选择【Choose】按钮,弹出如下对话框设置项目名称和路径,按照向导进行下一步选择编译套件向导会默认添加一个继承自CMainWindow的类,可以在此修改类的名字和基类。默...原创 2019-10-18 14:13:05 · 976 阅读 · 0 评论 -
01 QT - 概述
1. 什么是QtQt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。2. Qt的发展史1991年 Qt最早由奇趣科技开发1996年 进入商业领域,它也是目前流行的Linux桌面环境KDE的基础2008年 奇趣科技被诺基亚公司收购,Qt称为诺基亚旗下的编程语言2012年 Qt又...原创 2019-10-18 13:57:56 · 476 阅读 · 0 评论