从零开始学习Qt(一)

一、Qt是什么

Qt是跨平台C++图形用户界面应用程序框架

二、Qt的安装

下载网址:https://download.qt.io/archive/qt/
选择老一点的版本下载windows平台,登录Qt账号后一直点击下一步,组件不知道哪些有用就多选点在这里插入图片描述

三、Qt的优点

  1. 跨平台,几乎支持所有的平台
  2. 接口简单,容易上手
  3. 一定程度简化内存回收机制
  4. 开发效率高,能快速创建应用程序

四、创建第一个程序

创建[Qt Widgets Application]
使用基类[QWidget]

// main.cpp
#include "mywidget.h"
#include <QApplication> //包含一个应用程序类的头文件

// main程序入口 argc是命令行变量的数量 argv是命令行变量的数组
int main(int argc, char *argv[])
{
    // a应用程序对象,在Qt中,应用程序对象有且仅有一个
    QApplication a(argc, argv);
    // 窗口对象w myWidget的父类->QWidget
    myWidget w;
    // 窗口对象默认不会显示,必须要调用show方法显示窗口
    w.show();
    // 让应用程序对象a进入消息循环机制
    return a.exec();
}
//mywidget.h
Q_OBJECT // Q_OBJECT宏,允许类中使用信号和槽的机制

五、命名规范和快捷键

命名规范
类名:首字母大写,单词和单词之间首字母大写
函数名、变量:首字母小写,单词和单词之间首字母大写
快捷键
注释 ctrl + /
运行 ctrl + r
编译 ctrl + b
字体缩放 ctrl + 鼠标滚轮
查找 ctrl + f
整行移动 ctrl + shift + ↑
自动对齐 ctrl + i
同名之间的.h和.cpp切换 F4

六、QPushButton

    // 创建一个按钮
    QPushButton * btn = new QPushButton;
//    btn->show();// show以顶层方式弹出窗口控件
    btn->setParent(this);
    //显示文本
    btn->setText("第一个按钮");
    //创建第二个按钮 按照控件的大小创建窗口
    QPushButton * btn2 = new QPushButton("第二个按钮", this);
    //移动btn2按钮位置
    btn2->move(100, 100);
    //重置窗口大小
    resize(600, 400);
    //设置固定窗口大小
    setFixedSize(600, 400);
    //设置窗口标题
    setWindowTitle("第一个窗口");

七、对象树

创建QObject对象时,会将这个QObject对象添加到父对象的children()列表
父对象析构的时候,会把列表中所有对象析构
Markdown将文本转换为 HTML。

八、信号和槽

槽就是信号的处理函数
信号槽的优点:松散耦合,信号发送端和接收端本身是没有关联的,通过connect连接将两端耦合在一起。

	//需求 点击我的按钮 关闭窗口
    //参数1-信号的发送者 参数2-发送的信号 参数3-信号的接收者 参数4-处理的槽函数
    connect(btn3, &QPushButton::clicked, this, &myWidget::close);

自写信号和槽

//.h文件
	//槽函数返回值void,需要声明,也需要实现
    //可以有参数,可以发生重载
    void treat();
    
signals:
    //自定义信号写到signals下
    //返回值是void,只需要声明,不需要实现
    //可以有参数,可以重载
    void hungery();
//.cpp文件
	//创建一个老师对象
    this->tea = new Teacher(this);
    //创建一个学生对象
    this->stu = new Student(this);
    //老师饿了,学生请客的连接
    connect(tea, &Teacher::hungery, stu, &Student::thread);
    //调用下课函数
    classIsOver();
void Widget::classIsOver()
{
    //下课函数,调用后,触发老师饿了
    //信号需要触发
    emit tea->hungery();
}

信号和槽发生重载的情况
使用函数指针,指向重载的函数地址

    //连接带参数的,信号和槽
    //指针->地址
    //函数指针->函数地址
    void(Teacher:: *teacherSignal)(QString) = &Teacher::hungery;
    void(Student:: *studentSlot)(QString) = &Student::treat;
    connect(tea, teacherSignal, stu, studentSlot);
    //连接无参的信号和槽
    void(Teacher:: *teacherSignal2)(void) = &Teacher::hungery;
    void(Student:: *studentSlot2)(void) = &Student::treat;
    connect(tea, teacherSignal2, stu, studentSlot2);
    //断开信号
    disconnect(tea, teacherSignal2, stu, studentSlot2);

信号与槽扩展

  1. 信号是可以连接信号的
  2. 一个信号可以连接多个槽函数
  3. 多个信号可以连接同一个槽函数
  4. 信号和槽函数的参数类型必须一一对应
  5. 信号的参数个数可以多于槽函数的参数
  6. 如果信号的发送者和接受者是一个,可以忽略接受者参数

九、Lambda表达式

C++1中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作
[函数对象参数](操作符重载函数参数)mutable->返回值{函数体}

函数对象参数:

  1. 【=】局部变量都用值传递方式
  2. 【&】局部变量都用引用传递方式
  3. 【a】将a按值进行传递
  4. 【&a】将a按引用进行传递

加入mutable可以修改值传递的拷贝

//->返回值
int ret = []()->int{return 1000;}();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值