qt-C++笔记之按行读取文件并切换复选框打印复选框拼接出的字符串

news2024/11/19 16:32:45

qt-C++笔记之按行读取文件并切换复选框打印复选框拼接出的字符串

code review!

文章目录

  • qt-C++笔记之按行读取文件并切换复选框打印复选框拼接出的字符串
    • 1.运行
    • 2.文件结构
    • 3.main.cc
    • 4.main.pro
    • 5.a.txt
    • 6.b.txt

1.运行

请添加图片描述

2.文件结构

在这里插入图片描述

3.main.cc

在这里插入图片描述

代码

#include <QApplication>
#include <QCheckBox>
#include <QDebug>
#include <QFile>
#include <QPushButton>
#include <QTextStream>
#include <QVBoxLayout>
#include <QWidget>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建主窗口
    QWidget window;
    window.setWindowTitle("文件读取示例");

    // 创建按钮1
    QPushButton button1("读取文件1");
    // 创建按钮2
    QPushButton button2("读取文件2");
    // 创建按钮3(用于拼接并打印选中的复选框内容)
    QPushButton button3("拼接并打印选中内容");

    // 创建一个 QVBoxLayout 用于显示 QCheckBox
    QVBoxLayout *layout = new QVBoxLayout(&window);
    window.setLayout(layout);

    bool layoutIsEmpty = true; // 用于标记布局是否为空

    // 存储选中的复选框的文本内容
    QString selectedText;

    // 连接按钮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;
            }
        }

        // 读取文件1内容并添加到 QVBoxLayout
        QFile 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内容并添加到 QVBoxLayout
        QFile 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; // 布局不再为空
    });

    // 连接按钮3的点击事件
    QObject::connect(&button3, &QPushButton::clicked, [&]() {
        // 遍历 QVBoxLayout 中的复选框,拼接选中的文本内容
        selectedText.clear(); // 清空已存储的选中文本内容
        for (int i = 0; i < layout->count(); ++i) {
            QCheckBox *checkBox = qobject_cast<QCheckBox *>(layout->itemAt(i)->widget());
            if (checkBox && checkBox->isChecked()) {
                if (!selectedText.isEmpty()) {
                    selectedText += " "; // 在文本之间插入一个空格
                }
                selectedText += checkBox->text();
            }
        }

        // 打印选中的文本内容
        qDebug() << "选中的内容:" << selectedText;
    });

    // 将按钮添加到主窗口
    layout->addWidget(&button1);
    layout->addWidget(&button2);
    layout->addWidget(&button3);

    window.show();

    return app.exec();
}

4.main.pro

代码

QT += widgets

TARGET = FileContentReader
TEMPLATE = app

SOURCES += main.cpp

HEADERS +=

FORMS +=

DISTFILES += \

5.a.txt

代码

66666666
77777777
88888888
99999999
10101010

6.b.txt

代码

111111111111
222222222222
333333333333

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

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

相关文章

简易通讯录Promax

前言&#xff1a;哈喽小伙伴们&#xff0c;我们在前边的文章中已经介绍过了如何用C语言实现一个简易的通讯录&#xff0c;但是我们这个通讯录存在两个问题&#xff1a; 一是通讯录的大小不能自由变化&#xff1b;二是通讯录的信息在程序退出之后就没有了&#xff0c;不能保存。…

【C语言】进阶——文件操作

目录 前言 1.什么是文件 程序文件&#xff1a; 数据文件&#xff1a; 文件名&#xff1a; 2.文件的打开和关闭 2.1文件指针 2.2文件指针使用 2.3文件的打开和关闭 2.4 文件的使用方式 2.5文件的顺序读写 ✌字符输出函数fputc ✌字符输入函数fgetc ✌文本行输…

【重拾C语言】十三、动态数据组织(一)动态变量(malloc、calloc、realloc、free)

目录 前言 十三、动态数据组织 13.1 动态数据组织 13.2 动态变量 malloc函数 calloc函数 realloc函数 free函数 程序实例 前言 C语言中的动态数据组织是指在程序运行时根据需要动态地分配内存空间来存储数据。这允许程序在运行时根据实际需求来创建、修改和释放数据结…

【数字IC设计】VCS门级网表仿真

本文参考自文章。 除了RTL仿真以外&#xff0c;在IC设计过程中还会进行门级网表的仿真。当设计代码功能仿真通过之后&#xff0c;我们便使用Design Compiler工具对其进行逻辑综合&#xff0c;将RTL代码转化为由与、或、非等门电路和触发器组成的电路&#xff0c;称为门级网表(n…

25栈和队列-理解栈和队列

目录 LeetCode之路——232. 用栈实现队列 分析&#xff1a; LeetCode之路——225. 用队列实现栈 分析&#xff1a; 栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;是两种基本的数据结构&#xff0c;它们在计算机科学中用于不同的目的。以下是它们的定…

【传输层协议】UDP/TCP结构特点与原理(详解)

文章目录 1. UDP1.1 UDP结构1.2 UDP特点1. 无连接2. 不可靠3. 面向数据报4. 缓冲区5. 大小受限6. 无序性 2. TCP2.1 TCP结构2.2 TCP特点1. 有连接2. 可靠性3. 面向字节流4. 拥塞控制5. 头部开销 2.3 TCP原理1. 确认应答&#xff08;安全机制&#xff09;2. 超时重传&#xff08…

Ceph分布式存储的简单介绍与Ceph集群的部署搭建

文章目录 1. 存储的概述1.1 单机存储设备1.1.1 DAS&#xff08;直接附加存储&#xff09;1.1.2 NAS&#xff08;网络附加存储&#xff09;1.1.3 SAN&#xff08;存储区域网络&#xff09; 1.2 单机存储的缺陷1.3 分布式存储&#xff08;软件定义的存储 SDS&#xff09;1.4 分布…

【计算机网络笔记】数据交换之报文交换和分组交换

系列文章目录报文交换分组交换存储-转发报文交换 vs 分组交换总结 系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 报文交换 报文&#xff1a;源&#xff08;应用&#xff09;发送的信息整体。比如一个文件、一…

Transformer 中 Positional Encoding 实现

参考博文&#xff1a; https://www.cnblogs.com/nickchen121/p/16470736.html 解决问题 位置编码的主要目的是确保模型能够理解序列中的元素之间的相对位置和顺序&#xff0c;从而更好地捕捉到语义信息。在Transformer模型中&#xff0c;位置编码通常与词嵌入&#xff08;w…

前端小知识之【浏览器内核】

目录 &#x1f31f;前言&#x1f31f;PC端浏览器内核&#x1f31f;Trident内核&#x1f31f;Gecko内核&#x1f31f;WebKit内核(Chromium)&#x1f31f;Blink内核 &#x1f31f;移动端浏览器内核&#x1f31f;应用&#x1f31f;写在最后 &#x1f31f;前言 通常所谓的浏览器内…

docker安装nessus

注册地址:https://zh-tw.tenable.com/products/nessus/nessus-essentials 临时邮箱:http://24mail.chacuo.net/ 帮助文档:https://docs.tenable.com/nessus/Content/DeployNessusDocker.htmdocker pull tenableofficial/nessusdocker run --name "my-nessus" -d -p 8…

【Go入门】编程语言比较:Golang VS Python

Golang&#xff1a;最佳人工智能语言&#xff0c;性能优于 Python 本节是学习go的引入&#xff0c;为了了解Python与go编程语言间比较。后续会完成相关课程&#xff0c;并分享笔记。 如今&#xff0c;世界各地有数百万用户使用 Golang 作为机器学习和人工智能的编程语言。 最好…

算法通过村第十四关-堆|白银笔记|经典问题

文章目录 前言在数组中寻找第K大的元素堆排序原理合并K个排序链表总结 前言 提示&#xff1a;想要从讨厌的地方飞出来&#xff0c;就得有藏起来的翅膀。 --三岛由纪夫《萨德侯爵夫人》 这里我们主要看一下经典的题目&#xff0c;这三个题目来说都是堆的热点问题。重点再理解处理…

Qt不能安装自己想要的版本,如Qt 5.15.2

使用在线安装工具安装Qt5.15.2时&#xff0c;发现没有Qt 5的相关版本&#xff0c;只有Qt 6的版本&#xff0c;这时选择右边的Archive&#xff0c;再点击筛选&#xff0c;这时就会出现之前的Qt版本。

vscode插件路径转移C盘之外盘

改变vscode系统路径 最近C盘路径不够了&#xff0c;网上的工具使用没那么精细&#xff0c;还不如自己手动看每个文件夹大小。在整理过长遇到vscode插件路径转移&#xff0c;方法如下&#xff1a; 桌面图标右键点击属性 改变–extensions-dir后面参数就可以了。

Web3 整理React项目 导入Web3 并获取区块链信息

上文 WEB3 创建React前端Dapp环境并整合solidity项目&#xff0c;融合项目结构便捷前端拿取合约 Abi 我们用react 创建了一个 dapp 项目 并将前后端代码做了个整合 那么 我们就来好好整理一下 我们的前端react的项目结构 我们在 src 目录下创建一个 components 用来存放我们的…

Python学习----Day07

函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段。函数能提高应用的模块性&#xff0c;和代码的重复利用率。你已经知道Python提供了许多内建函数&#xff0c;比如print()。但你也可以自己创建函数&#xff0c;这被叫做…

C++ 程序员入门需要多久,怎样才能学好?

文章目录 C学习方案有哪些推荐的在线教程或学习资源可以帮助我学习C编程&#xff1f;你能给我一些关于C内存管理的进阶学习资源吗&#xff1f; AI解答 C学习方案 C是一种功能强大且广泛应用的编程语言&#xff0c;作为一个初学者&#xff0c;学习C需要一定的时间和努力。学习…

【java学习—七】对象的实例化过程(33)

文章目录 1. 简单类对象的实例化过程2. 子类对象的实例化过程 1. 简单类对象的实例化过程 2. 子类对象的实例化过程

YOLO目标检测——打电话数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;安全监控、智能驾驶、人机交互、智能城市数据集说明&#xff1a;YOLO目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富。使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo(txt…