8 Qt

QT

Day01

一.什么是qt

一个基于c++ 语言的

专注于图形界面的

其它也不错的

一个跨平台的艺术级别的

图形开发框架(软件半成品)。

二.qt的发展

​ 2005 qt4

​ 2008 诺基亚收购

​ 2009 开源

​ qt.project.org

三.qt 的编程环境

​ 3.1 qt的开发工具

​ qmake -version qt的版本

​ assistant 帮助文档

​ QApplication (qt的应用程序类)

​ qmake -project 把项目的源文件 组织成

​ 项目描述文件 .pro

​ qmake 可以根据项目描述文件得到Makefile

​ (Makefile 是文件和文件的依赖关系)

​ make 根据Makefile 得到目标

​ designer 可见既所得的图形界面设计工具

​ 界面文件 使用 *.ui

​ uic 把ui文件 转换成 .h文件

​ qtcreator qt的集成开发工具

3.2 qt的头文件

​ 对类型进行说明的文件

​ 一个功能类 对应一个头文件

​ 按照功能 划分了模块 QtCore QtGui

​ QtXml QtSql QtNetWork QtOpenGL

​ 不带.h的头文件 可以做到 类型的名字

​ 和头文件的名字 是一致的。

​ #include

​ #include

​ #include

​ #include

3.3 库文件

​ 库文件 就是对头文件的分模块实现。

四.写一个qt程序

​ 一个程序 一个文件夹 一个程序就是一个工程

​ 使用c++ 语法来写程序

​ abc123

​ 通过查文档 可以获知类所属的模块名如:

​ #include

​ 可以获知 类的继承关系

​ 类中使用到的其它类型

​ 类的构造函数(创建对象)

​ 析构函数

​ 成员函数(完成某个功能的函数)

​ 类中定义的 信号 和 槽(函数)

​ / 这就是槽函数声明 /

​ public slots:

​ void show();

​ /* 这是信号函数声明

​ 这个函数不需要我们实现 系统会自动实现*/

​ public:signals:

​ void mysig();

​ 静态函数 (不需要对象 就可以调用的函数)

​ 类的详细说明

五.使用文档 解决中文显示问题

​ #include

​ 查询一下 如何创建 QTextCodec类型的对象?

​ QTextCodec* QTextCodec::codecForName

​ (“编码方式”);

​ GBK gb2312 utf-8

​ unicode

六.按钮点击 退出标签显示

​ 按钮对象的行为 影响了 标签对象的行为

​ QObject 类型中有一个函数 可以连接 两个

​ 毫不相关的对象。

​ QObject::connect(

​ const QObject* sender,

​ const char* signal,

​ const QObject* reciver,

​ const char* method);

​ sender 是信号发送者对象的地址

​ signal 发出的信号

​ SIGNAL(信号函数名())

​ reciver 信号接收者的地址

​ method 槽函数(处理信号函数)

​ qpush(QPushButton) 中哪个信号函数

​ 可以代表点击

​ clicked()

​ qlab(QLabel) 对象中哪个槽函数

​ 可以代表关闭

​ close();

七.父窗口

​ 一个窗口 如果没有父窗口 则这个窗口是一个独立

​ 的窗体。

​ 如果一个窗体 指定了父窗口,则这个窗口会停靠

​ 在父窗口上。

​ 父窗口的类型 是QWidget类型 或者子类型

​ (QMainWindow QDialog )

​ 如何调整组件的大小?

​ resize(x,y);

​ 在程序中创建一个按钮对象 并指定按钮对象的

​ 父窗体,显示按钮对象。

​ 移动组件的位置:

​ move(x,y);

八.带参的信号和槽

​ QSlider 滑块类

​ 信号函数 void valueChanged(int val);

​ QSpinBox 微调框类

​ 槽函数 void setValue(int val);

​ 槽函数就是一个带有特殊修饰的成员函数

​ 连接带参的信号和槽时 连接函数中 要出现信号

​ 和槽参数的类型。

​ 1.使这两个对象相互影响!

Day02

一.如何使用c++方式编写qt的代码

1.类的实例就是一个带有组件的父窗口 自己的类就要

​ 继承QWidget 或者 子类 QDialog QMainWindow

2.窗口中的组件 都要做为自定义类的成员变量

3.类的头文件 和 实现文件 要分离实现

4.如果类中有自定义的信号 和槽函数 则需要在头文件中

​ 出现一个宏 Q_OBJECT

​ 使用c++ 方式 实现qq登录框的登录功能

​ 如果输入的是 用户名 abc 密码是 123

​ 就输出 login success! 其它都打印 login failed

二.信号和槽

2.1信号和槽是qt编程的基础 和 核心 可以关联两个毫不相关

的对象。

2.2当信号和槽绑定时 没当发射 或者 触发这个信号时 就自动

调用这个槽函数。

2.3信号和槽函数的声明

public slots:

void show();

public:signals:

void mySig();

2.4如果类中有自定义的信号和槽需要声明

​ 一个宏 Q_OBJECT

2.5 连接信号 和 槽 使用

​ QObject::connect(const QObject* sender,

​ const char* signal,

​ const QObject* reciver,

​ const char* method);

​ QObject::connect(a,SIGNAL(t()),b,SLOT(g()));

2.6 断开信号 和 槽的连接

​ QObject::disconnect(const QObject* sender,

​ const char* signal,

​ const QObject* reciver,

​ const char* method);

2.7 一个信号 可以连接到多个槽

​ QObject::connect(a,SIGNAL(t()),b,SLOT(g()));

​ QObject::connect(a,SIGNAL(t()),c,SLOT(gg()));

​ QObject::connect(a,SIGNAL(t()),d,SLOT(ggg()));

2.8 一个槽 可以连接多个信号

​ QObject::connect(a,SIGNAL(t()),b,SLOT(g()));

​ QObject::connect(c,SIGNAL(m()),b,SLOT(g()));

2.9 一个信号 和 连接到 另外一个信号

​ 当一个信号 发射之后 会触发另外一个信号

​ 这个信号可以传递下去

​ QObject::connect(a,SIGNAL(t()),b,SIGNAL(h()));

​ QObject::connect(b,SIGNAL(h()),c,SLOT(cs()));

2.10 当删除对象时 和 这个对象关联的所有连接

​ 就会自动断开。

2.11 是不是任意的信号 可以 和任意的槽进行连接?

​ 不是。

​ 信号和槽 连接时 要有相同的参数类型 相同的参数顺序

​ 相同的参数个数。

​ 信号 和 槽 如果带参 需要出现参数的类型。

2.12 想让任意的信号 和 任意的槽进行连接?

​ 直接在自定义的槽函数 调用 最终的槽函数

​ QPushButton clicked()

​ QLabel setText(QString)

​ 自定义槽函数 结合自定义信号完成

​ (线程中的数据 一般是通过信号通知线程外的访问)

三.设计器的使用

designer 可见即所得的编辑器

设计界面 把窗口部件盒中的组件 拖拽到 合适位置

鼠标可以改变组件的位置和 大小

选中组件 可以复制 可以删除

​ 使用方向键 改变组件的位置 每次 10px

​ ctrl+方向键改变组件的位置 每次 1px

双击改变文字

shift + 方向键 改变组件的大小 每次 10px

ctrl+shift +方向键 改变组件的大小 每次 1px

通过属性编辑器(ctrl+i) 控制组件的相关属性

​ 对象名 以及其它显示属性

对象察看器 查看对象之间的组织关系 确定对象名和

​ 对象的类型。

最终得到界面文件 *.ui

四.如何使用 ui文件

4.1 把ui文件转换成 .h 文件

​ uic jfq.ui -o jfq.h

4.2 jfq.h 就是代表界面的文件

4.3 使用生成的jfq.h

​ 定义新的.h 文件 使用jfq.h 中的类

​ 做界面类的指针

​ 实现这个头文件

4.4 创建界面 加载界面

4.5 如果实现功能

​ 要访问界面中的组件 需要通过 ui访问

​ (这就是和 第二个版本的区别)

自己使用设计器 设计qq登陆框 完成功能!


打赏

微信支付 支付宝支付

License

本作品由Simonhttp://www.uusystem.com)创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 欢迎转载,但任何转载必须保留完整文章,在显要地方显示此声明以及原文链接。如您有任何疑问或者授权方面的协商,请邮件:postmaster@uusystem.com。