c++中成员变量初始化列表的使用

.h文件内容如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;private slots:void onButtonClicked();private:QPushButton *button;QLabel *label;};
#endif // MAINWINDOW_H

.cpp 文件内容如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow),button(new QPushButton("Click Me", this)),label(new QLabel("Hello, World!", this))
{ui->setupUi(this);QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(button);layout->addWidget(label);QWidget *centralWidget = new QWidget(this);centralWidget->setLayout(layout);setCentralWidget(centralWidget);connect(button, &QPushButton::clicked, this, &MainWindow::onButtonClicked);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::onButtonClicked()
{label->setText("Button Clicked!");
}

在C++的Qt框架中,MainWindow::MainWindow(QWidget *parent)MainWindow类的构造函数,它负责初始化这个类的对象。在这个构造函数中,有几个关键的部分需要详细解释,特别是button(new QPushButton("Click Me", this)), label(new QLabel("Hello, World!", this))这一部分。

成员变量初始化列表

首先,构造函数使用了一个称为“成员变量初始化列表”的特性来初始化类的成员变量。这是C++推荐的做法,因为它通常比在构造函数体内赋值更高效,特别是对于大型对象或需要复杂构造的对象来说。

buttonlabel的初始化

  • button(new QPushButton("Click Me", this)),
  • label(new QLabel("Hello, World!", this))

这两行代码做了以下几件事:

  1. 动态分配内存new关键字用于在堆上动态分配内存。这意味着QPushButtonQLabel对象不会在栈上自动销毁,而是需要手动管理它们的生命周期(通常是通过智能指针或确保在适当的时候调用delete)。

  2. 创建对象QPushButton("Click Me", this)创建了一个按钮对象,其上的文本为“Click Me”。第二个参数this是指向当前MainWindow对象的指针,它将按钮的父对象设置为MainWindow。在Qt中,设置父对象意味着子对象(如按钮)的生命周期将由父对象管理,当父对象被销毁时,子对象也会被自动销毁。

    类似地,QLabel("Hello, World!", this)创建了一个标签对象,其上的文本为“Hello, World!”,并将其父对象设置为MainWindow

  3. 初始化成员变量:这些对象被赋值给MainWindow类的成员变量buttonlabel。这意味着在MainWindow类的其他部分可以访问这些控件,以修改它们的属性或连接信号和槽。

注意点

  • ui成员变量:在构造函数中,ui(new Ui::MainWindow)也使用了类似的语法来初始化ui成员变量。然而,这里ui是一个指向由Qt Designer生成的UI类的指针,它通常包含了界面上所有控件的引用和布局信息。setupUi(this)函数被调用以设置这些控件的实际界面。

  • 布局管理:在构造函数中,还创建了一个QVBoxLayout布局,并将按钮和标签添加到这个布局中。然后,这个布局被设置为一个新创建的QWidget(作为中央部件)的布局。这确保了按钮和标签将按照垂直布局排列在MainWindow中。

  • 信号和槽的连接:最后,使用connect函数将按钮的clicked信号连接到MainWindow类的onButtonClicked槽。这意味着当按钮被点击时,onButtonClicked函数将被调用。

效果:

button(new QPushButton("Click Me", this)), label(new QLabel("Hello, World!", this))这两行代码在MainWindow的构造函数中动态创建了按钮和标签控件,并将它们分别初始化为类的成员变量。这些控件被添加到布局中,并最终显示在MainWindow界面中。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nfs服务器搭建

目录 1&#xff0c;nfs服务端 1&#xff09;安装 2&#xff09;修改nfs配置文件 3&#xff09;创建共享目录 4&#xff09;启动服务nfs配置文件 2&#xff0c;客户端 3&#xff0c;测试 1&#xff09;客户端 2&#xff09;服务端查看 4&#xff0c;systemd实现客户…

从0开始学PHP面向对象内容之常用设计模式(策略,观察者)

PHP设计模式——行为型模式 PHP 设计模式中的行为模式&#xff08;Behavioral Patterns&#xff09;主要关注对象之间的通信和交互。行为模式的目的是在不暴露对象之间的具体通信细节的情况下&#xff0c;定义对象的行为和职责。它们常用于解决对象如何协调工作的问题&#xff…

Python办公——openpyxl处理Excel每个sheet每行 修改为软雅黑9号剧中+边框线

目录 专栏导读背景1、库的介绍①&#xff1a;openpyxl 2、库的安装3、核心代码4、完整代码5、最快的方法(50万行44秒)——表头其余单元格都修改样式总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍…

【AI系统】TVM 实践案例

TVM 实践案例 在本文我们探讨一下&#xff0c;如何利用 AI 编译器在新的硬件上部署一个神经网络&#xff0c;从算法设计到实际运行&#xff0c;有哪些需要考虑的地方&#xff1f;本节将以 TVM 为例&#xff0c;首先介绍一下 TVM 的工作流&#xff1a; 导入模型。TVM 可以从 Te…

【AI系统】昇腾异构计算架构 CANN

昇腾异构计算架构 CANN 本文将介绍昇腾 AI 异构计算架构 CANN&#xff08;Compute Architecture for Neural Networks&#xff09;&#xff0c;这是一套为高性能神经网络计算需求专门设计和优化的架构。CANN 包括硬件层面的达芬奇架构和软件层面的全栈支持&#xff0c;旨在提供…

C++:map容器——自定义数据类型进行自定义排序规则

map容器和set容器自带排序操作&#xff0c;但是&#xff0c;对于自定义数据类型&#xff0c;二者必须指定排序规则。本文以map容器为例&#xff0c;针对自定义数据类型作为key值的指定排序进行程序实现。 首先&#xff0c;自定义数据类型&#xff1a;Person类&#xff0c;该类将…

Vue Web开发遇到问题汇总

1.Vue Web开发遇到问题汇总 1.1. vue项目main.js文件下import router from ‘./router‘默认导入router文件夹下index.js的原因 vue项目main.js文件下import router from ./router’默认导入router文件夹下index.js的原因 import router from ./router //等效于 //import rou…

lua download

https://www.lua.org/ https://www.lua.org/versions.html#5.4

CentOS7:MySQL 8.0.36升级到8.0.40

文章介绍RPM形式进行小版本升级。 1、查看系统版本 ldd --version 2、下载相应的MySQL rpm包 MySQL :: Download MySQL Community Server 3、查看现有MySQL安装的rpm rpm -qa |grep mysql 如图&#xff0c;有6个rpm包安装。 4、电脑上解压下载的rpm压缩包&#xff0c;对应…

【element-tiptap】添加公式编辑器【MathQuill】

前言&#xff1a;前面的文章【element-tiptap】实现公式编辑 中&#xff0c;已经实现了一种非常简单的公式编辑&#xff0c;键入latex公式直接在文档中转换。今天讲的另一个更加复杂的公式编辑器的扩展&#xff0c;双击公式的时候弹出公式编辑的弹窗&#xff0c;可以对公式进行…

SpringBoot源码-Spring Boot启动时控制台为何会打印logo以及自定义banner.txt文件控制台打印

1.当我们启动一个SpringBoot项目的时候&#xff0c;入口程序就是main方法&#xff0c;而在main方法中就执行了一个run方法。 SpringBootApplication public class StartApp {public static void main(String[] args) {// testSpringApplication.run(StartApp.class);} }publi…

【人工智能-基础】SVM中的核函数到底是什么

文章目录 支持向量机(SVM)中的核函数详解1. 什么是核函数?核函数的作用:2. 核技巧:从低维到高维的映射3. 常见的核函数类型3.1 线性核函数3.2 多项式核函数3.3 高斯径向基函数(RBF核)4. 总结支持向量机(SVM)中的核函数详解 支持向量机(SVM,Support Vector Machine)…

【Docker】Docker 容器日志过大导致磁盘爆满

docker容器的日志文件目录位于/var/lib/docker/containers/容器/容器-json.log 查看日志大小 cd /var/lib/docker/containers/ du -h --max-depth1 临时删一点 cd xxxxxxx/ tail -100 xxxxxxx-json.log > xxxxxxx-json.log 如图 解决方式&#xff08;全局&#xff09; …

SpringBoot集成Milvus|(实现向量的存储和查询)

此文章为转载文章: 原文链接 文章目录 SpringBoot集成Milvus|&#xff08;实现向量的存储和查询&#xff09;前言一、Milvus介绍二、Milvus数据库安装 1.Milvus安装环境准备&#xff08;centos7&#xff09;2.Milvus客户端安装3.attu新建Milvus集合 三、Milvus集成 1.依赖引入2…

数据结构__01

六.图 一.定义 1.有向图 2.无向图 3.完全图 4.子图 5.度 6.路径以及长度 7.简单路径 回路 简单回路 二.图的存储结构 1.邻接矩阵 有向图 无向图 有向网 2.邻接矩阵的优缺点 &#xff08;行出列入&#xff09; 3.邻接表 三.图的遍历 深度优先遍历 广度优先遍历 四.图的应用 …

嵌入式蓝桥杯学习1 电量LED

cubemx配置 1.新建一个STM32G431RBT6文件 2.在System-Core中点击SYS&#xff0c;找到Debug&#xff08;设置为Serial Wire&#xff09; 3.在System-Core中点击RCC&#xff0c;找到High Speed Clock(设置为Crystal/Ceramic Resonator) 4.打开Clock Configuration &#xff0…

【网络】协议与网络传输

目录 一、协议 1.1 认识协议 1.2 协议分层 二、OSI七层模型 三、TCP/IP五(四)层模型 四、网络传输 4.1 数据包封装与分用 4.2 网络传输基本流程 4.2.1 以太网通信 &#xff08;1&#xff09;原理 &#xff08;2&#xff09;数据碰撞问题 &#xff08;3&#xff09;…

【力扣】3274. 检查棋盘方格颜色是否相同

一、题目 给你两个字符串 coordinate1 和 coordinate2&#xff0c;代表 8 x 8 国际象棋棋盘上的两个方格的坐标。以下是棋盘格的参考图&#xff1a; 如果这两个方格颜色相同&#xff0c;返回 true&#xff0c;否则返回 false。坐标总是表示有效的棋盘方格。坐标的格式总是先字…

JavaWeb12

登陆拦截 会话技术 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应 会话跟踪&#xff1a;一种维护浏览器状态的方法&#xff0c;服务器需要识…

使用STM32CubeMX配置串口各种功能

使用STM32CubeMX配置串口各种功能 STM32CubeMX软件的安装接收空闲中断STM32CubeMX配置1.新建工程2. 选择芯片3. 选择时钟和下载方式4. 配置串口5.设置工程消息6.生成代码7.修改生成的代码 空闲中断DMA转运STM32CubeMX配置4.配置串口5.设置工程消息6.生成代码7.修改生成的代码 S…