Qt学习笔记-DAY1

Qt学习笔记-DAY1

1.简介

在这里插入图片描述

2.创建一个Qt项目

2.1 创建

开始步骤
1.在这里插入图片描述
2.在这里插入图片描述
3.在这里插入图片描述
4.先选择Qweight在这里插入图片描述
5.在这里插入图片描述

2.2 mian.cpp分析

在这里插入图片描述

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

//mian程序入口  argc:命令行变量 数量 argv:[]命令行变量数组
//鼠标键盘的输入都存到  argc argv[]
int main(int argc, char *argv[])
{
    //a:应用程序对象,在Qt中 应用程序对象 有且只有一个
    QApplication a(argc, argv);
    //w:窗口对象  hxyWidget为QWidget子类
    hxyWidget w;
    //w窗口对象调用show方法才会显示
    w.show();
    //让 应用程序对象 进入消息循环 随时相应用户消息
    //让 代码阻塞到这行~
    return a.exec();
}

2.3 工程文件分析

在这里插入图片描述
其中 Qwidgets 4 5代不同

#-------------------------------------------------
#
# Project created by QtCreator 2020-12-24T17:02:22
#
#-------------------------------------------------

QT       += core gui   ## Qt包含的模块core、gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets ##大于4版本以上 包含 widget模块

TARGET = hxy12    ##目标-生成的.exe//程序的名称
TEMPLATE = app    ##模板-应用程序模板  Application  

DEFINES += QT_DEPRECATED_WARNINGS

##源文件【自动】
SOURCES += \  
        main.cpp \
        hxywidget.cpp

##头文件【自动】	    
HEADERS += \
        hxywidget.h

2.3 头文件分析

在这里插入图片描述

#ifndef HXYWIDGET_H
#define HXYWIDGET_H

#include <QWidget>  //头文件

class hxyWidget : public QWidget
{
    Q_OBJECT  //Q_OBJECT宏:允许类中使用信号和槽 
 public:
    hxyWidget(QWidget *parent = 0);  //构造函数
    ~hxyWidget();    //析构函数
};

#endif // HXYWIDGET_H

2.4 代码架构分析

在这里插入图片描述

3.Qt 若干重要概念

3.1 命名规范&快捷键&帮助文档

命名规范:

类名首字母大写、单词和单词之间首字母大写、函数名变量名称首字母小写、单词和单词之间首字母大写

快捷键:

  • 注释————ctrl +/
  • 运行————ctrl +r
  • 编译————ctrl + b
  • 字体缩放——ctrl+鼠标滚轮
  • 查找————ctrl +f
  • 整行移动——ctrl + shift+ ,
  • 帮助文档—— F1
  • 自动对齐—— ctrl +i
  • 同名之间的.h和.cpp切换——F4

3.2 对象树

简化了内存回收机制

你只管new对象~ 会自动从下往上释放~~
只要你setparent()

万物皆为QObject 子类
这个QObject对象会自动添加到其父对象的children()列表
当父对象析构的时候,这个列表中的所有对象也会被析构

在这里插入图片描述

3.3 坐标系

左上角为 0 , 0 点-----x以右为正方向-----y以下为正方向
在这里插入图片描述

3.4 信号&槽【重点】

在这里插入图片描述

3.4.1 控件的信号&槽
连接函数 :connect
参数1 信号的发送者
参数2 发送的信号(函数地址)
参数3 信号的接受者
参数4 处理的槽函数 (函数的地址)
Qt4版本写法connect(zt,SIGNAL(hungry()) , st , SLOT(treat()))

Qt4版本优点:参数直观,缺点 :类型不做检测

其中:

clicked为QPushButton类自带的signal、close为QWidget自带槽函数

myWidget::myWidget(QWidget *parent): QWidget(parent)
{
    MyPushButton * myBtn = new MyPushButton;
    myBtn->setText("我自己的按钮");
    myBtn->move(200,0);
    myBtn->setParent(this); //设置到对象树中
    
    connect( myBtn, &MyPushButton::clicked, this, &myWidget::close );
}
3.4.2 自定义信号&槽
1.自定义信号2.自定义槽函数3.触发自定义的信号函数
写到 signals下写到 public slot下 或者public 或者全局函数emit
返回void返回voidemit”对象“->”信号“
需要声明,不需要实现需要声明 ,也需要实现【先连接后 再触发才有用】
可以有参数 ,可以重载可以有参数 ,可以重载

注意:
①信号可以连接信号
②一个信号可以连接多个槽函数、多个信号可以连接同一个槽函数
③信号和槽函数的参数 必须类型一一对应
④信号的参数个数 可大于槽的参数个数 要求
⑤当自定义信号和槽出现重载 (多种传参情况):
需要利用函数指针 明确指向函数的地址 ---- 函数指针 -> 函数地址

{
    //自定义 函数指针 *teacherSignal、*studentSlot
    void(Teacher:: *teacherSignal)(QString  ) = &Teacher::hungry;
    void(Student:: *studentSlot)(QString  )  = &Student::treat;
    connect(zt,teacherSignal,st,studentSlot);
 }

例子:下课后,老师触发饿了信号,学生响应信号,请客吃饭

Teacher .h 类

class Teacher : public QObject
{
    Q_OBJECT
public:
    explicit Teacher(QObject *parent = 0);
signals:
    void hungry();
    void hungry(QString foodName);
public slots:

};

Student.h 类

class Student : public QObject
{
    Q_OBJECT
public:
    explicit Student(QObject *parent = 0);
signals:
public slots:
    void  treat();
    void  treat(QString foodName);

};

Widget .h 主窗口类

#include "teacher.h"
#include "student.h"

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
private:
    Ui::Widget *ui;
    Teacher * zt;
    Student * st;
    void classIsOver();
};

Widget.cpp


void Widget::classIsOver()
{
    //下课函数,调用后 触发老师饿了的信号
    //emit zt->hungry();
    emit zt->hungry("宫保鸡丁");
}

Widget::Widget(QWidget *parent) :QWidget(parent),
{
    //创建一个老师对象
    this->zt = new Teacher(this);
    //创建一个学生对象
    this->st = new Student(this);
    //老师饿了 学生请客的连接
    connect(zt,&Teacher::hungry,st,&Student::treat);
    //调用下课函数
    classIsOver();
}

3.5 Lambda表达式(相当于一个万能的槽)
Lambda表达式最常用:[=] () {}
1.[]为标识符 匿名函数
[=] 值传递
[&] 引用传递
2.() 参数
3.{} 实现体
4.[] () ->int {}返回值 为int

利用lambda表达式 实现点击按钮 关闭窗口

{
    QPushButton * btn2 = new QPushButton ;
    btn2->setText("按钮1");
    btn2->move(100,0);
    btn2->setParent(this);
    
    //可以省略this  
    connect(btn2,&QPushButton::clicked, this,[=](){
        this->close();
        btn2->setText("关闭");
    });
 }

4.控件—Qpushbutton

在主窗口.cpp 的构造函数里添加控件

4.1 按钮控件常用api

4.1	创建 QPushButton * btn = new QPushButton
4.2	设置父亲  setParent(this)
4.3	设置文本  setText(“文字”)
4.4	设置位置  move(宽,高)

4.5	重新指定窗口大小 resize
4.6	设置窗口标题 setWindowTitle
4.7	设置窗口固定大小 setFixedSize

4.2 第一种创建

    QPushButton * btn = new QPushButton; 头文件 #include <QPushButton>

    //设置父亲
    btn->setParent(this);
    //设置文字
    btn->setText("德玛西亚");
    //移动位置
    btn->move(100,100);

4.3 第二种创建

    //第二种创建
    QPushButton * btn2 = new QPushButton("孙悟空",this);
    //重新指定窗口大小
    this->resize(600,400);

    //设置窗口标题
    this->setWindowTitle("第一个项目");

    //限制窗口大小
    this->setFixedSize(600,400);

学会看help文档
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值