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