qt-C++笔记之清空QVBoxLayout中的QCheckBox

qt-C++笔记之清空QVBoxLayout中的QCheckBox

QVBoxLayout 和 QCheckBox 是两个类,都是 PyQt/PySide 中用于创建图形用户界面 (GUI) 的工具。它们通常与 Qt 库一起使用,Qt 是一个流行的跨平台 GUI 库,可以用于创建桌面应用程序。

  1. QVBoxLayout:

    • QVBoxLayout 是 Qt 中的布局管理器之一,用于在窗口或对话框中管理和布置其他窗口小部件(widget)。布局管理器用于自动调整小部件的大小和位置,以适应窗口的大小和屏幕的分辨率。
    • Q 表示它是 Qt 中的一个类,而 QVBoxLayout 表示垂直布局。垂直布局管理器将小部件按垂直方向排列,一个在另一个下面。你可以将各种小部件添加到 QVBoxLayout 中,并它们将按顺序垂直排列。
  2. QCheckBox:

    • QCheckBox 是 Qt 中的一个小部件,通常用于创建复选框。复选框是一种用户界面元素,允许用户在选项之间进行选择或取消选择。它通常表示两个状态,选中和未选中。
    • 用户可以单击 QCheckBox 来切换选中状态。在编程中,你可以使用 QCheckBox 来获取或设置其当前状态,并根据用户的选择来执行不同的操作。

这两个类通常一起使用,你可以创建一个包含多个复选框的垂直布局,以便用户可以在其中选择不同的选项。这样的组合在创建选项设置或首选项窗口时非常有用。

当你需要清空QVBoxLayout中的内容时,除了上面提到的方法,还可以使用以下方法之一:

  1. 使用QLayout::removeWidget方法

    你可以使用QLayout::removeWidget方法逐个从布局中移除小部件,然后删除这些小部件。这将删除布局中的所有小部件,而不需要删除布局中的所有项目,然后再删除它们。

    if (!layoutIsEmpty) {QLayoutItem *item;while ((item = layout->takeAt(0)) != nullptr) {QCheckBox *checkBox = qobject_cast<QCheckBox*>(item->widget());if (checkBox) {layout->removeWidget(checkBox);delete checkBox;}delete item;}
    }
    
  2. 使用QLayoutItem::widget方法检查并删除

    你可以使用QLayoutItem::widget方法来检查QLayoutItem是否是QCheckBox,如果是,则删除它。这也避免了不必要的布局项删除,因为只删除QCheckBox

    if (!layoutIsEmpty) {QLayoutItem *item;while ((item = layout->takeAt(0)) != nullptr) {QCheckBox *checkBox = qobject_cast<QCheckBox*>(item->widget());if (checkBox) {delete checkBox;}delete item;}
    }
    

这两种方法都可以帮助你在不清空整个布局的情况下删除QVBoxLayout中的小部件。你可以选择其中一种方法,根据你的实际需求来使用。

  1. 一个完整的测试例程:
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QFile>
#include <QTextStream>
#include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口QWidget window;window.setWindowTitle("文件读取示例");// 创建按钮1QPushButton button1("读取文件1");// 创建按钮2QPushButton button2("读取文件2");// 创建一个 QVBoxLayout 用于显示 QCheckBoxQVBoxLayout *layout = new QVBoxLayout(&window);window.setLayout(layout);bool layoutIsEmpty = true; // 用于标记布局是否为空// 连接按钮1的点击事件QObject::connect(&button1, &QPushButton::clicked, [&]() {// 如果布局不为空,清空 QVBoxLayout 中的内容// 方法1:使用QLayout::removeWidget方法if (!layoutIsEmpty) {QLayoutItem *item;while ((item = layout->takeAt(0)) != nullptr) {QCheckBox *checkBox = qobject_cast<QCheckBox*>(item->widget());if (checkBox) {layout->removeWidget(checkBox);delete checkBox;}delete item;}}//        方法2:使用QLayoutItem::widget方法检查并删除//        if (!layoutIsEmpty) {//            QLayoutItem *item;//            while ((item = layout->takeAt(0)) != nullptr) {//                QCheckBox *checkBox = qobject_cast<QCheckBox*>(item->widget());//                if (checkBox) {//                    layout->removeWidget(checkBox);//                    delete checkBox;//                }//                delete item;//            }//        }// 读取文件1内容并添加到 QVBoxLayoutQFile file("/home/user/qt_normal_test/mytest2/a.txt");if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);for (int i = 0; i < 10 && !in.atEnd(); ++i) {QString line = in.readLine();QCheckBox *checkBox = new QCheckBox(line);layout->addWidget(checkBox);}file.close();} else {qDebug() << "Error opening file 1: " << file.errorString();}layoutIsEmpty = false; // 布局不再为空});// 连接按钮2的点击事件QObject::connect(&button2, &QPushButton::clicked, [&]() {// 如果布局不为空,清空 QVBoxLayout 中的内容// 方法1:使用QLayout::removeWidget方法if (!layoutIsEmpty) {QLayoutItem *item;while ((item = layout->takeAt(0)) != nullptr) {QCheckBox *checkBox = qobject_cast<QCheckBox*>(item->widget());if (checkBox) {layout->removeWidget(checkBox);delete checkBox;}delete item;}}//        方法2:使用QLayoutItem::widget方法检查并删除//        if (!layoutIsEmpty) {//            QLayoutItem *item;//            while ((item = layout->takeAt(0)) != nullptr) {//                QCheckBox *checkBox = qobject_cast<QCheckBox*>(item->widget());//                if (checkBox) {//                    layout->removeWidget(checkBox);//                    delete checkBox;//                }//                delete item;//            }//        }// 读取文件2内容并添加到 QVBoxLayoutQFile file("/home/user/qt_normal_test/mytest2/b.txt");if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);for (int i = 0; i < 10 && !in.atEnd(); ++i) {QString line = in.readLine();QCheckBox *checkBox = new QCheckBox(line);layout->addWidget(checkBox);}file.close();} else {qDebug() << "Error opening file 2: " << file.errorString();}layoutIsEmpty = false; // 布局不再为空});// 将按钮添加到主窗口layout->addWidget(&button1);layout->addWidget(&button2);window.show();return app.exec();
}

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

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

相关文章

精益求精:使用Ansible集中式自动备份核心数据

1、引言 在当今数字化时代&#xff0c;数据是企业和组织的核心资产。为了确保数据的安全性和可恢复性&#xff0c;备份是至关重 要的。然而&#xff0c;手动备份数据可能会繁琐且容易出错&#xff0c;特别是在面对大规模和分布式的数据存储情况下。幸运的是&#xff0c;Ansibl…

(N-128)基于springboot,vue酒店管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis 本系统功…

C语言柔性数组

大家好&#xff0c;我们今天来补充一个知识&#xff0c;就是柔性数组。 柔性数组概念&#xff1a; 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。 C99 中&#xff0c;结构中的最后一个元素允许是未知大小的数…

【c++】跟webrtc学std array 4: H264PacketBuffer 包缓存

H264PacketBuffer m98代码:H264PacketBuffer 类似于PacketBuffer ,但仅用于H264// The H264PacketBuffer does the same job as the PacketBuffer but for H264 // only. To make it fit in with surronding code the PacketBuffer input/output // classes are used. 因此,…

【C++】:类和对象(中)之类的默认成员函数——构造函数and析构函数

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成…

斯坦福JSKarel编程机器人使用介绍

斯坦福JSKarel编程机器人使用介绍 为了避免被编程语言固有的复杂性所困扰&#xff0c;有一个被称为卡雷尔&#xff08;Karel&#xff09;机器人的微型世界&#xff08;microworld&#xff09;的简化环境&#xff0c;可以让编程初学者从中学习理解编程的基本概念&#xff0c;而…

ES6 let const var和解构赋值

1.let/const和var的区别 1.变量提升&#xff1a;var会发生变量提升&#xff0c;let和const不存在变量提升 2.暂时性死区&#xff1a;变量声明之前变量不可用称为暂时性死区。var不存在&#xff0c;let和const存在暂时性死区 3.typeof 不再是百分百不会报错&#xff1a;let声…

unity(WebGL) 截图拼接并保存本地,下载PDF

截图参考&#xff1a;Unity3D 局部截图、全屏截图、带UI截图三种方法_unity 截图_野区捕龙为宠的博客-CSDN博客 文档下载&#xff1a; Unity WebGL 生成doc保存到本地电脑_unity webgl 保存文件_野区捕龙为宠的博客-CSDN博客 中文输入&#xff1a;Unity WebGL中文输入 支持输…

Peter算法小课堂—正整数拆分

大家可能会想&#xff1a;正整数拆分谁不会啊&#xff0c;2年级就会了&#xff0c;为啥要学啊 例题 正整数拆分有好几种&#xff0c;这里我们列举两种讲。 关系 我们看着第一幅图&#xff0c;头向左转90&#xff0c;记住你看到的图&#xff0c;再来看第二幅图&#xff0c;你…

KubeSphere安装mysql8

需要持久化储存数据的,建立有状态服务。 无状态服务是不会持久化的,重启就归零 KubeSphere 创建自建应用后,创建有状态服务,但是自己应用的有状态服务不能外放端口,需要在服务哪里删除pod,在创建负载指定相关的有状态服务,就可以外放端口了 安装mysql8 添加初始化密码参…

Linux软件包名称含AMD,ARM,x64的详解

下载clickhouse-backup时看到不同软件包&#xff0c;有的是x86&#xff0c;有的是amd64&#xff0c;有的是arm64&#xff0c;这些有啥区别呢&#xff1f; clickhouse-backup-2.4.2-1.x86_64.rpm clickhouse-backup_2.4.2_amd64.deb clickhouse-backup_2.4.2_arm64.deb x86 和 …

Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务

Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务 一. CentOS7 安装配置SFTP服务器详解一、SFTP简介二、关闭防火墙三、安装SSH服务在CentOS7中,sftp只是ssh的一部分,所以采用yum来安装ssh服务即可1. 查看是否已经安装了ssh2.…

狄克斯特拉(Dijkstra) 算法 php实现

《算法图解》中提到的狄克斯特拉算法&#xff0c;用php实现。 一 原理及解释 根据示例图求出起点到终点的最小耗费路径。 因为涉及每条路径的权重&#xff0c;所以这种算法仅适合有向路径。 所谓有向路径&#xff0c;指仅从起点指向终点的路径。 相对的无向路径&#xff0…

【面试题笔记】C++继承和多态常见高频经典面试题

1.继承相关习题 1.1 什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f; 菱形继承&#xff1a;菱形继承是多继承的一种特殊情况。两个中间类继承父类&#xff0c;而派生类继承了两个中间类&#xff0c;从而在继承关系上呈现出一种菱形。如下图所示&#xff1a; **…

ZKP3.2 Programming ZKPs (Arkworks Zokrates)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 3: Programming ZKPs (Guest Lecturers: Pratyush Mishra and Alex Ozdemir) 3.3 Using a library ( tutorial) R1CS Libraries A library in a host language (Eg: Rust, OCaml, C, Go, …)Key type: constraint system Mai…

光伏三相并网逆变器的控制策略与性能分析(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

MySQL基本操作之创建数据表

设计表: 学生表(Student): 学号(StudentID)- 主键,用于唯一标识每个学生姓名(Name)性别(Gender)年龄(Age)出生日期(BirthDate)地址(Address)电话(Phone)邮箱(Email)课程表(Course): 课程号(CourseID)- 主键,用于唯一标识每门课程课程名(CourseNam…

利用Spring Boot框架做事件发布和监听

一、编写事件 1.编写事件类并集成spring boot 事件接口&#xff0c;提供访问事件参数属性 public class PeriodicityRuleChangeEvent extends ApplicationEvent {private final JwpDeployWorkOrderRuleDTO jwpDeployWorkOrderRuleDTO;public PeriodicityRuleChangeEvent(Obje…

基于Java的师生交流答疑管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…