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

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

code review!

文章目录

1.运行

2.文件结构

3.main.cc

代码

cpp 复制代码
#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

代码

bash 复制代码
QT += widgets

TARGET = FileContentReader
TEMPLATE = app

SOURCES += main.cpp

HEADERS +=

FORMS +=

DISTFILES += \

5.a.txt

代码

bash 复制代码
66666666
77777777
88888888
99999999
10101010

6.b.txt

代码

bash 复制代码
111111111111
222222222222
333333333333
相关推荐
Qt程序员8 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
qeen878 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
m0_736034858 小时前
存储基础和虚拟化
笔记
满天星83035779 小时前
【Qt】信号和槽(二) (自定义信号和槽)
开发语言·数据库·qt
王老师青少年编程9 小时前
信奥赛C++提高组csp-s之搜索进阶(记忆化搜索案例实践3)
c++·记忆化搜索·方格取数·csp·信奥赛·csp-s·提高组
Jun6269 小时前
QT(19)-VISA控制仪器
开发语言·qt
Titan202410 小时前
Linux动静态库
linux·服务器·c++
AOwhisky10 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
j_xxx404_11 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai
wuminyu11 小时前
Java锁机制之park和unpark源码剖析
java·linux·c语言·jvm·c++