【Qt笔记①】帮助文档、窗口、按钮、信号和槽、lambda表达式

学习第一天:2024-3-9

文章目录

  • Qt creator 快捷键
  • 帮助文档
  • 默认生成的main.cpp逐行解释
  • 核心类
  • 帮助文档的查阅方法-①
  • 代码创建按钮
      • 第一个
      • 第二个
      • 对窗口的其他设置
  • 对象树
  • 窗口坐标系
  • 信号和槽(优点:松散耦合)
      • 帮助文档的查阅方法-②
          • 找信号函数的方法
          • 找槽函数的方法
      • 自定义信号和槽
  • lambda表达式
  • 练习
  • Menu
  • Tool

Qt creator 快捷键

运行:ctrl+r
帮助文档:F1 退出文档:ESC
自动对齐:ctrl+i
在这里插入图片描述

帮助文档

在这里插入图片描述

默认生成的main.cpp逐行解释

核心类

QObject 万类之祖

帮助文档的查阅方法-①

打开assistant.exe,左侧点索引,输入QPushButton,看到右侧显示如下内容。Header是头文件,qmake是在.pro文件中应该加入的内容,Inherits是该类继承自谁(即父类),Inherited by是该类的子类。
在这里插入图片描述

代码创建按钮

第一个

新建一个QWidget项目,起名为btxl。在btxl.cpp中加入头文件<QPushButton>,btxl类构造函数中加入以下内容:

btxl::btxl(QWidget *parent)
    : QWidget(parent)
{
	QPushButton * bt = new QPushButon;
}

这样就创建了一个按钮,但是ctrl+r运行不显示这个按钮,why?
你想起了main.cpp中btxl类实例化的w是要通过show函数来显示的,并且QPushButton的父类的父类就是QWidget,于是做出如下修改:

btxl::btxl(QWidget *parent)
    : QWidget(parent)
{
	QPushButton * bt = new QPushButon;
	bt->show();
}

这下好了,运行后出现两个窗口。你想:不不不,按钮是要在页面上的。
正确写法:

btxl::btxl(QWidget *parent)
    : QWidget(parent)
{
	QPushButton * bt = new QPushButon;
	//bt->show();
	bt->setParent(this);
}

setParent相当于设置了一个层级关系(类似于unity的hierarchy)
你还想给这个按钮上写点文字:

btxl::btxl(QWidget *parent)
    : QWidget(parent)
{
	QPushButton * bt = new QPushButon;
	//bt->show();
	bt->setParent(this);
	bt->setText("hahaha");
}

在这里插入图片描述

第二个

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/75677624e3d546658153da33ecd7922d.pn
这样窗口就很小。

对窗口的其他设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对象树

只要new出来的对象设置了parent(方法为setParent),就能加到对象树中,关掉窗口后自动析构,无需手动free。这样一定程度上简化了内存回收机制。但请注意,仅仅从QObject派生是无法自动析构的,必须要setParent

【测试一】

myButton类派生自QPushButton,析构函数输出一句话“myButton析构”。在关掉按钮的小窗口时并没有析构。

    myButton *mbtn = new myButton();
    mbtn->show();

【测试二】

myButton类派生自QPushButton,析构函数输出一句话“myButton析构”。在关掉按钮的小窗口时显示析构。

    myButton *mbtn = new myButton();
    mbtn->setParent(this);

【测试三】

Student类和Score类派生自QObject(万类之祖)。对象s设置了parent,而对象xiaoming没有设置parent。关闭窗口时,显示s析构而xiaoming未析构。

    //创建对象
    xiaoming = new Student;
    s = new Score;
    s->setParent(this);

在这里插入图片描述
在这里插入图片描述

窗口坐标系

在这里插入图片描述
在这里插入图片描述

信号和槽(优点:松散耦合)

需求:点一个按钮,关闭窗口。翻译一下就是:按钮点击,导致窗口关闭。这句话加粗的四个部分就是connect的四个参数。具体的:

参数1:信号发送者
参数2:发送的信号(函数地址)
参数3:信号接收者
参数4:对信号进行的反应函数(称为槽函数(slots),也传函数地址)

信号函数和槽函数的查找就需要帮助文档了。

帮助文档的查阅方法-②

找信号函数的方法

信号的发送者是bt,类型是QPushButton。查找
在这里插入图片描述
在页面中找signal字样。
在这里插入图片描述
发现QPushButton的信号函数就是从祖先那继承来的。
点开第一个,是它的直接父类,QAbstractButton。clicked就是我们要找的。
在这里插入图片描述

找槽函数的方法

信号的接收者是本页面,类型是btxl,继承自QWidget。
在这里插入图片描述
右侧第五个Public Slots就是槽函数。
点开:
在这里插入图片描述
我们需要的是第一个,click()

综上,实现方法是下面这句话:

connect(bt, &QPushButton::clicked, this, &btxl::close);connect(bt, &QPushButton::clicked, this, &QWidget::close);

在这里插入图片描述

自定义信号和槽

注意:先连接,发送信号者再发出信号。
自定义的信号写在signals下,信号只需要声明,不需要实现
自定义的槽写在public slots下,槽需要声明也需要实现
在这里插入图片描述
触发信号的关键字:emit

lambda表达式

lambda表达式是c++的语法糖,所谓语法糖就是复杂语法的等价简化写法。定义匿名函数(无需函数名)。
最常见的用法是[=](){},例如:

btxl::btxl(QWidget *parent)
    : QWidget(parent)
{
    QPushButton * bt2 = new QPushButton("点我", this);
    connect(bt2, &QPushButton::clicked, this, [=](){ //第三个参数可省略,默认是this
        bt2->setText("已经点过啦");
    });
    
}

lambda表达式作为槽函数时,可以使一句connect连接多个槽函数。例如:

btxl::btxl(QWidget *parent)
    : QWidget(parent)
{
    //创建对象
    xiaoming = new Student;
    s = new Score;

    QPushButton * bt = new QPushButton("x", this);
    connect(bt, &QPushButton::clicked, this, [=](){
        this->close();
        emit xiaoming->goodStudy(); //emit可省
    });

    connect(xiaoming, &Student::goodStudy, s, &Score::highScore);

}

练习

窗口上有一个按钮,按一下打开一个新窗口,再按一下关闭新窗口。

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


btxl::btxl(QWidget *parent)
    : QWidget(parent)
{

    int stat = 0;
    QWidget *newpage = new QWidget;

    QPushButton * bt = new QPushButton("打开新窗口", this);
    bt->resize(100,50); //按钮的大小
    connect(bt, &QPushButton::clicked, this, [=, &stat](){
        if (stat == 1)
        {
            newpage->close();
            bt->setText("打开新窗口");
            stat = 0;
        }
        else
        {
            newpage->show();
            bt->setText("关闭新窗口");
            stat = 1;
        }
        qDebug() << stat;
    });
}


btxl::~btxl()
{

}

Menu

    ui->setupUi(this);
    resize(600, 400);
    QMenuBar *bar = menuBar();
    setMenuBar(bar);
    QMenu * fileMenu = bar->addMenu("文件");
    fileMenu->addAction("新建");
    fileMenu->addSeparator();
    fileMenu->addAction("打开");
    QMenu * editMenu = bar->addMenu("编辑");
    editMenu->addAction("查找");

Tool

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/737188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VBA:demo大全

VBA常用小代码合集&#xff0c;总有一个是您用得上的~ (qq.com) 如何在各个分表创建返回总表的命令按钮&#xff1f; 今天再来给大家聊一下如何使用VBA代码&#xff0c;只需一键&#xff0c;即可在各个分表生成返回总表的按钮。 示例代码如下&#xff1a; Sub Mybutton()Dim …

基于YOLOV5的车辆行人检测系统的设计与实现(PyQT页面+YOLOv5模型)

简介 随着智能交通系统的发展,实时检测车辆和行人变得越来越重要,以提高道路安全和交通管理效率。我们开发了一种基于YOLOv5目标检测模型的车辆与行人检测系统。本报告将详细介绍该系统的实际应用与实现,包括系统架构、功能实现、使用说明、检测示例、数据集获取与介绍、YO…

泛微E9与金蝶云星空ERP的无缝集成案例详解(包括接口与字段)

业务系统现状 背景介绍 泛微E9和金蝶云星空ERP是两款广泛应用与企业管理的信息系统&#xff0c;分别在移动办公自动化和企业资源计划管理领域占据重要地位。然而企业在使用这些系统时往往面临着信息孤岛和系统孤立的问题&#xff0c;导致数据无法在不系统之间高效流转共享。 当…

微信小程序毕业设计-在线厨艺平台系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

JavaWeb——MySQL:DDL操作库

目录 1.DDL&#xff1a;查询数据库&#xff1b; 1.1 查询数据库 1.2 创建数据库 1.DDL&#xff1a;查询数据库&#xff1b; 具体操作&#xff1a;增 删 查 用 &#xff1b; 1.1 查询数据库 SQL语句&#xff1a;show databases; 由于我创建过一些数据库&#xff0c;我查询的…

Spring AI 介绍以及与 Spring Boot 项目整合

Spring AI 项目旨在简化使用 Spring Boot 开发包含人工智能功能的应用程序&#xff0c;提供抽象和支持多种模型提供商及矢量数据库提供商。 Spring AI 的功能特点 支持主流模型提供商&#xff1a;如 OpenAI、Microsoft、Amazon、Google 和 Huggingface 等。支持多种模型类型&a…

ViT:4 Pruning

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

vue学习(三)

14.监视属性watch 当被监视的属性发生变化时&#xff0c;回调函数立即调用&#xff0c;进行操作 监视的两种写法&#xff1a;直接配置或者通过vm添加 watch:{isHot:{immediate:true, //首次用到执行handler(newValue,oldValue){console.log("isHot 被修改了",newV…

SwiftUI 6.0(iOS/iPadOS 18)中全新的 Tab 以及 Sidebar+悬浮 TabView 样式

概览 看来苹果一直对 iPadOS 中标签栏&#xff08;TabView&#xff09;不甚满意。这不&#xff0c;在 WWDC 2024 中苹果又对 TabView 外观做了大幅度的进化。 现在我们可以在顶部悬浮条和左侧的 Sidebar 两种不同布局之间恣意切换 TabView 的外观啦。而且&#xff0c;这在 Swi…

技术性屏蔽百度爬虫已经一周了!

很久前明月就发现百度爬虫只抓取、只收录就是不给流量了&#xff0c;加上百度搜索体验越来越差&#xff0c;反正明月已经很久没有用过百度搜索&#xff0c;目前使用的浏览器几乎默认搜索都已经修改成其他搜索引擎了&#xff0c;真要搜索什么&#xff0c;一般都是必应谷歌结合着…

自然语言处理领域的明星项目推荐:Hugging Face Transformers

在当今人工智能与大数据飞速发展的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为推动科技进步的重要力量。而在NLP领域&#xff0c;Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度&#xff0c;为您深…

python3GUI--ktv点歌软件By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.启动2.搜索2.服务1.首页2.天气预报3.酒水饮料4.酒水饮料2 3.服务4.灯光5.调音6.排行榜7.分类点歌9.歌手点歌10.歌手个人页 三&#xff0e;心得体会1.关于代码2.关于设计3.关于打包 四&#xff0e;总结 文件大小&#xff1a;33.…

最新下载:XmanagerXShell【软件附加安装教程】

​相信大家都认同支持IPv6&#xff1a;最近越来越多的公司和国家都采用了IPv6&#xff0c;Xmanager的最新版本v5也加入支持这个功能&#xff0c;无论你是同时使用IPv4和IPv6网络或者完全的IPv6网络&#xff0c;Xmanager 5都可完全满足你的要求&#xff0c;使用MIT Kerberos认证…

理解什么是DSR,嗅探器视角下的IP和MAC地址识别(C/C++代码实现)

网络嗅探器是监控和分析网络流量的一种工具&#xff0c;它能够捕获数据包并提取出关键的信息&#xff0c;比如IP地址和MAC地址。 网络嗅探器工作原理基于网卡的工作模式。正常情况下&#xff0c;网卡只处理发送给它的数据包&#xff0c;忽略其他数据。但是&#xff0c;如果将网…

Python题目

实例 3.1 兔子繁殖问题&#xff08;斐波那契数列&#xff09; 兔子从出生后的第三个月开始&#xff0c;每月都会生一对兔子&#xff0c;小兔子成长到第三个月后也会生一对独自。初始有一对兔子&#xff0c;假如兔子都不死&#xff0c;那么计算并输出1-n个月兔子的数量 n int…

成章数据库安装体验

对标Redis的国产数据库 一位来自国产数据库的朋友想请我试用一下他们的产品。并且直言早期问题比较多&#xff0c;还请多多包涵。一般对于这种比较客观和友好的我都愿意试试。对于怼天怼地吊打谁的我个人就不尝试了。 他们中文名字叫“成章数据库“我就尝试从一个不了解产品的…

华为数通——OSPF

正掩码&#xff1a;/24 255.255.255.0 反掩码&#xff1a; 255.255.255.255 -255.-255.-255.0 0.0.0.255 例如掩码&#xff1a;255.255.252.0 反掩码&#xff1a;0.0.3.255 在反掩码里面&#xff0c;0 bit 表示精确匹配&#xff0c;1…

STM32上实现spwm调制原理分析

在STM32微控制器上实现SPWM&#xff08;正弦脉宽调制&#xff0c;Sinusoidal Pulse Width Modulation&#xff09;调制的核心是利用高频载波&#xff08;三角波&#xff09;与低频基波&#xff08;正弦波&#xff09;作比较得出。 那么在STM32里三角波和正弦波分别是什么&…

热电阻温度计的测量电路

热电阻温度计的测量电路&#xff0c;为达到高精度测量&#xff0c;通常会采用电桥测量原理&#xff0c;并结合适当的热电阻类型和连接方式。 惠斯通电桥是用于测量一组电阻式元件阻值变化的电路。该电路具有两个并联电阻支路&#xff0c;充当激励电压 VEXCITATION 的分压器。每…

无霍尔BLDC驱动

目前主要的无霍尔控制方案是基于反电势检测信 息判断换相点,本文研究反电势在 PWM - OFF 点的检 测方案确定换相点。 1. 反电动势检测方案 BLDC 的模型做等效,将线圈阻抗看成是一个 线性电阻和一个储能电感的等效,其等效电路图如图 1所示。 电机三相绕组输出端电压的电压…