【五天时间】Qt从入门到实战:第一天

第一天

1.1 Qt的介绍、优点、成功案例

什么是Qt?

Qt是一个跨平台的C++图形用户界面应用程序框架。她为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。下载地址:https://download.qt.io/new_archive/qt/

Qt的优点

  • 跨平台,几乎支持所有的平台
  • 接口简单,容易上手
  • 一定程度上简化了内存回收机制
  • 开发效率高,能够快速的构建应用程序
  • 可以进行嵌入式开发

Qt的成功案例

  • Linux桌面环境
  • WPS office办公软件
  • Skype网络电话
  • 谷歌地图
  • VLC多媒体播放器
  • VirtualBox虚拟机软件

1.2 创建第一个Qt程序

  • 点击创建项目后,选择项目路径以及项目名称.
  • 名称:不能有中文,不能有空格
  • 路径:不能有中文路径
  • 默认创建有窗口类:myWidget,基类有三种选择:QWidget,QMainWindow、QDialog
  • main函数
    • QApplication a 应用程序对象,有且仅有一个
    • myWidget w 实例化窗口对象
    • w.show() 调用show函数显示窗口
    • return a.exec(); 让应用程序对象进入消息循环机制中,代码阻塞到当前行

1.3 熟悉按钮控件常用API

#include "mywidget.h"
#include<QPushButton>

myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
{
    
    
    //创建一个按钮
    QPushButton *btn=new QPushButton;
    btn->show();//show以顶层方式弹出窗口控件
    //让btn对象依赖在myWidget窗口中
    btn->setParent(this);
    //显示文本
    btn->setText("第一个按钮");

    //创建第二个按钮 按照控件的大小创建窗口
    QPushButton * btn2=new QPushButton("第二个按钮",this);

    //移动btn2按钮
    btn2->move(100,100);

    //重置窗口大小
    resize(600,400);

    //固定窗口大小
    setFixedSize(600,400);

    //设置窗口标题
    setWindowTitle("第一个窗口");
}

myWidget::~myWidget()
{
    
    

}

1.4 对象树的基本概念

  • 当创建的对象在堆区的时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放操作,自动将其放入对象树中。
  • 一定程度上简化了内存回收机制。

1.5 Qt中的坐标系统

  • 左上角为0,0点
  • x以右为正方向,y以下为正方向

1.6 信号和槽的基本使用以及扩展

  • 连接函数 connect
    • 参数1:信号的发送者
    • 参数2:发送的信号(函数地址)
    • 参数3:信号的接收者
    • 参数4:处理的槽函数(函数地址)
//需求 点击我的按钮 关闭窗口
    //参数1 信号的发送者 参数2 发送的信号(函数的地址)参数3 信号的接收者 参数4 处理的槽函数
    connect(myBtn,&QPushButton::clicked,this,&QWidget::close);
  • 自定义信号和槽
    • 自定义信号:写到Signals下;返回void;需要声明,不需要实现;可以有参数,不可以重载。
    • 自定义槽函数:返回void;需要声明和实现;可以有参数,可以重载;写到public slot下或者public或者全局函数
//创建一个老师对象
    this->zt=new Teacher(this);

    //创建一个学生对象
    this->st=new Student(this);

	//老师饿了,学生请客的连接
	connect(zt,&Teacher::hungry,st,&Student::treat);

    //调用下课函数
    classIsOver();
  • 当自定义信号和槽出现重载,需要利用函数指针明确指向函数的地址
	//连接带参数的信号和槽函数
    //指针->地址
    //函数指针->函数地址
    void(Teacher::*teacherSignal)(QString)=&Teacher::hungry;
    void(Student::*studentSlot)(QString)=&Student::treat;

    //老师饿了,学生请客的连接
    connect(zt,teacherSignal,st,studentSlot);

    //调用下课函数
    classIsOver();
  • QString转为char*:
    • QString转为QByteArray:.toUtf8()
    • QByteArray转为char*:.data()
      QString:有括号
      在这里插入图片描述
      char*:没有括号
      在这里插入图片描述
  • 信号可以连接信号
  • 一个信号可以连接多个槽函数
  • 多个信号可以连接同一个槽函数
  • 信号和槽函数的参数必须类型一一对应
  • 信号和槽函数的参数个数是不是要一致?信号的参数个数可以多于槽函数的参数个数
	//无参信号和槽连接
    void(Teacher::*teacherSignal2)(void)=&Teacher::hungry;
    void(Student::*studentSlot2)(void)=&Student::treat;
    connect(zt,teacherSignal2,st,studentSlot2);

    //信号连接信号
    connect(btn,&QPushButton::clicked,zt,teacherSignal2);
  • 断开信号
	//断开信号
    disconnect(zt,teacherSignal2,st,studentSlot2);
  • Qt4版本以前的信号和槽连接方式
//Qt4版本以前的信号和槽连接方式
    //利用Qt4信号和槽连接无参版本
    connect(zt,SIGNAL(hungry()),st,SLOT(treat()));

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40507857/article/details/125730739
今日推荐