QT文件操作与对话框交互详解,万字解析!!

#include "widget.h"
#include "ui_widget.h"

#include <QFile>
#include<QFileDialog>

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(oncurrentIndexChanged(int)));
//    connect(this, SIGNAL(mysignal()), this, SLOT(myslot()));
//    connect(this, SIGNAL(mysignalparams(int)), this, SLOT(myslotparams(int)));
//    emit mysignal();
//    emit mysignalparams(100);
}

Widget::~Widget()
{
    delete ui;
}

//void Widget::myslot()
//{
//    std::cout << "myslot" << std::endl;
//}

//void Widget::myslotparams(int value)
//{
//    qDebug() << "myslotparams";
//    qDebug() << value;
//}


void Widget::on_btnRead_clicked()
{
//    QFile file("E:/QT2/test.txt");
      QFile file;
      file.setFileName("E:/QT/test.txt");
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug() << "file open error";
    }
    int size = file.size();
    char* context = new char(size);
    char* con = (char *)malloc(sizeof(char)*size);
//    char context[100] = {"\0"};
    if(file.read(context, 100) == -1) return;
    qDebug() << context;
    file.close();
}


void Widget::on_btnWrite_clicked()
{
    QFile file("E:/QT/test2.txt");
    file.open(QIODevice::WriteOnly | QIODevice::Text);
    file.write("Program 45-QFile001 write something to This File 我是测试");
}


void Widget::on_btnstreamRead_clicked()
{
    QFile file;
    file.setFileName("E:/QT/test.txt");
  if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
      qDebug() << "file open error";
  }

    QTextStream in(&file);
    in.setCodec("UTF-8");
    //QString context = in.read(file.size());
    while(!in.atEnd()){
    QString context = in.readLine();
    qDebug() << context;
    qDebug() << "---------";
    }

    file.close();
}


void Widget::on_btnstreamWrite_clicked()
{
    QFile file;
    file.setFileName("E:/QT/test3.txt");
  if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
      qDebug() << "file open error";
  }
    QTextStream out(&file);
    out.setCodec("UTF-8");
    out << "I write stream char to file ";
    file.close();
}


void Widget::on_btnQFileDialog_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "E:/QT/",
        tr(" Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"));
    qDebug() << fileName;

    QFile file;
    file.setFileName(fileName);
  if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
      qDebug() << "file open error";
  }

    QTextStream in(&file);
    in.setCodec("UTF-8");
    //QString context = in.read(file.size());
    while(!in.atEnd()){
    QString context = in.readLine();
    qDebug() << context;
    qDebug() << "---------";
    }

    file.close();
}


void Widget::on_btnSe_clicked()
{
//    int arr[120];
//    for (int i : arr) {

//    }

    QFileDialog qFileDialog;
    qFileDialog.setFileMode(QFileDialog::ExistingFiles);
    qFileDialog.setNameFilter("*.txt");
    qFileDialog.exec();
    QStringList qstrings = qFileDialog.selectedFiles();
    for(QString str : qstrings){
            qDebug() << str;
    }
}


void Widget::on_btnSave_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
                               "E:/QT/untitled.txt",
                               tr("Text (*.txt *.doc)"));
    qDebug() << fileName;
    QFile file;
    file.setFileName(fileName);
  if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
      qDebug() << "file open error";
  }
    QTextStream out(&file);
    out.setCodec("UTF-8");
    out << "Qdialog Write Data to the Txt File";
    file.close();
}

void Widget::oncurrentIndexChanged(int index)
{
    qDebug() << index;
    qDebug() << ui->comboBox->currentText();
}
//解释这串代码,写上注释

这段代码是 widget.cpp 文件的实现部分,它包含了与文件操作、对话框交互以及下拉列表(QComboBox)相关的槽函数。下面我将为你逐行添加详细的中文注释,并解释每个函数的作用和逻辑。


📄 逐行解析 + 中文注释

包含头文件


cpp

深色版本

#include "widget.h"        // 包含自定义窗口部件类的声明
#include "ui_widget.h"      // 自动生成的 UI 类定义(包含界面控件)
#include <QFile>            // 提供文件读写功能
#include <QFileDialog>      // 提供文件选择对话框功能
  • widget.h:包含类 Widget 的声明;
  • ui_widget.h:由 Qt Designer 根据 .ui 文件生成,包含了所有界面元素的定义;
  • QFile 和 QFileDialog:用于文件操作和打开文件对话框。

构造函数


cpp

深色版本

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);  // 初始化界面控件
    connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(oncurrentIndexChanged(int)));
    // 自动连接 comboBox 的 currentIndexChanged 信号到 oncurrentIndexChanged 槽
}
  • ui->setupUi(this):初始化从 .ui 文件生成的所有控件;
  • connect():手动连接 comboBox 控件的 currentIndexChanged(int) 信号到槽函数 oncurrentIndexChanged(int),虽然 Qt 自动连接机制也能处理这种情况,但这里显式地做了连接;

析构函数


cpp

深色版本

Widget::~Widget()
{
    delete ui;  // 清理分配给 ui 的资源
}
  • 释放 ui 对象,避免内存泄漏。

按钮点击事件处理函数

1. on_btnRead_clicked() —— 使用字节方式读取文件内容

cpp

深色版本

void Widget::on_btnRead_clicked()
{
    QFile file;
    file.setFileName("E:/QT/test.txt");

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "file open error";
        return;
    }

    int size = file.size();
    char* context = new char(size);  // ❗错误!应为 new char[size]
    char* con = (char *)malloc(sizeof(char)*size);  // 未使用

    if(file.read(context, 100) == -1) {  // 读取最多100个字节
        qDebug() << "read error";
        return;
    }

    qDebug() << context;

    file.close();

    delete[] context;  // ❗注意:new[] 要用 delete[]
    free(con);
}
  • 这段代码尝试读取一个文本文件并输出其内容,但存在一些问题:
    • new char(size) 应该是 new char[size]
    • 未使用的变量 con
    • 更好的做法是使用 QByteArray 或 QString 来避免手动管理内存。
2. on_btnWrite_clicked() —— 写入文本文件

cpp

深色版本

void Widget::on_btnWrite_clicked()
{
    QFile file("E:/QT/test2.txt");

    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug() << "file open error";
        return;
    }

    file.write("Program 45-QFile001 write something to This File 我是测试");
    file.close();
}
  • 如果文件不存在则创建新文件;
  • 如果已存在,则清空文件后再写入指定内容。
3. on_btnstreamRead_clicked() —— 使用 QTextStream 流方式读取文件

cpp

深色版本

void Widget::on_btnstreamRead_clicked()
{
    QFile file;
    file.setFileName("E:/QT/test.txt");

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "file open error";
        return;
    }

    QTextStream in(&file);
    in.setCodec("UTF-8");

    while(!in.atEnd()) {
        QString context = in.readLine();
        qDebug() << context;
        qDebug() << "---------";
    }

    file.close();
}
  • 使用 QTextStream 逐行读取文件内容,适合读取文本文件;
  • 设置编码格式支持多语言字符。
4. on_btnstreamWrite_clicked() —— 使用 QTextStream 流方式写入文件

cpp

深色版本

void Widget::on_btnstreamWrite_clicked()
{
    QFile file;
    file.setFileName("E:/QT/test3.txt");

    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug() << "file open error";
        return;
    }

    QTextStream out(&file);
    out.setCodec("UTF-8");

    out << "I write stream char to file ";
    file.close();
}
  • 使用 << 运算符像 std::cout 一样输出内容;
  • 支持多语言字符。
5. on_btnQFileDialog_clicked() —— 弹出文件打开对话框并读取文件内容

cpp

深色版本

void Widget::on_btnQFileDialog_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(
        this,
        tr("Open Image"),
        "E:/QT/",
        tr("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)")
    );

    qDebug() << fileName;

    QFile file;
    file.setFileName(fileName);

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "file open error";
        return;
    }

    QTextStream in(&file);
    in.setCodec("UTF-8");

    while(!in.atEnd()) {
        QString context = in.readLine();
        qDebug() << context;
        qDebug() << "---------";
    }

    file.close();
}
  • 允许用户选择任意文本文件进行读取;
  • 支持多种文件类型过滤;
  • 读取后输出到调试控制台。
6. on_btnSe_clicked() —— 多文件选择对话框

cpp

深色版本

void Widget::on_btnSe_clicked()
{
    QFileDialog qFileDialog;
    qFileDialog.setFileMode(QFileDialog::ExistingFiles);
    qFileDialog.setNameFilter("*.txt");
    qFileDialog.exec();

    QStringList selectedFiles = qFileDialog.selectedFiles();

    for(QString str : selectedFiles){
        qDebug() << str;
    }
}
  • 弹出多选文件对话框;
  • 限制只能选择 .txt 文件;
  • 输出所有选中的文件路径。
7. on_btnSave_clicked() —— 弹出保存文件对话框并写入内容

cpp

深色版本

void Widget::on_btnSave_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(
        this,
        tr("Save File"),
        "E:/QT/untitled.txt",
        tr("Text (*.txt *.doc)")
    );

    qDebug() << fileName;

    QFile file;
    file.setFileName(fileName);

    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug() << "file open error";
        return;
    }

    QTextStream out(&file);
    out.setCodec("UTF-8");

    out << "Qdialog Write Data to the Txt File";
    file.close();
}
  • 用户可输入文件名并选择保存路径;
  • 自动创建新文件;
  • 写入指定内容。

下拉列表变化响应函数


cpp

深色版本

void Widget::oncurrentIndexChanged(int index)
{
    qDebug() << index;
    qDebug() << ui->comboBox->currentText();
}
  • 当 comboBox 的选项改变时触发;
  • 输出当前索引和对应的文本内容。

✅ 总结

这段代码主要实现了以下功能:

  • 文件读取和写入:通过按钮点击事件处理不同的文件操作;
  • 文件对话框:提供用户选择或保存文件的功能;
  • 下拉列表变化监听:当 comboBox 的选项改变时,打印当前索引和文本内容。

如果你希望进一步优化代码或解决特定问题,请告诉我具体的需求或遇到的问题 😊

#ifndef WIDGET_H
#define WIDGET_H

#include<iostream>
#include <QWidget>
#include<QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

//signals:
//        void mysignal();
//        void mysignalparams(int value);
//private slots:
//        void myslot();
//        void myslotparams(int value);


private slots:
    void on_btnRead_clicked();

    void on_btnWrite_clicked();

    void on_btnstreamRead_clicked();

    void on_btnstreamWrite_clicked();

    void on_btnQFileDialog_clicked();

    void on_btnSe_clicked();

    void on_btnSave_clicked();

    void oncurrentIndexChanged(int index);
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

你提供的这段代码是 widget.h 文件,它是 Qt 项目中主窗口类的头文件。这个类继承自 QWidget,并声明了多个私有槽函数(private slots),用于响应界面上各种控件(如按钮、下拉框等)的点击或状态变化事件。


📄 逐行解析 + 中文注释

头文件卫士(防止重复包含)

#ifndef WIDGET_H
#define WIDGET_H
  • 如果 WIDGET_H 没有被定义,则继续编译;
  • 防止同一个头文件被多次包含,避免重复定义错误。

引入标准库和 Qt 类

#include <iostream>     // C++ 标准输入输出流(虽然目前没用上)
#include <QWidget>      // Qt 的基础窗口部件类
#include <QDebug>       // Qt 调试输出工具,用于 qDebug() 打印调试信息

命名空间声明(由 .ui 自动生成)

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
  • 这是对 .ui 文件生成的 UI 类的前置声明;
  • 实际上,在构建项目时,Qt 会根据 .ui 文件自动生成一个 ui_widget.h 文件;
  • 此处只是告诉编译器:“这个类存在”,不需要知道具体实现。

类定义:Widget 继承 QWidget

class Widget : public QWidget
{
    Q_OBJECT
  • 定义了一个名为 Widget 的类,继承自 QWidget
  • Q_OBJECT 是 Qt 的宏,表示这个类支持:
    • 信号与槽机制(Signal-Slot)
    • 元对象系统(Meta Object)
    • 动态属性、国际化等特性

构造函数和析构函数

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
  • 构造函数:初始化窗口组件,默认无父窗口;
  • 析构函数:释放资源,比如 ui 指针;

自定义信号(当前被注释掉了)

//signals:
//        void mysignal();
//        void mysignalparams(int value);
  • 信号用于通知其他对象某些事件发生;
  • 比如可以当某个按钮被点击时发射信号;
  • 这里被注释掉,暂时没有使用。

自定义槽函数(也被注释掉了)

//private slots:
//        void myslot();
//        void myslotparams(int value);
  • 槽函数用于接收信号并做出响应;
  • 同样被注释掉,未启用。

控件相关的槽函数(实际使用的)

private slots:
    void on_btnRead_clicked();            // 读取文件按钮点击
    void on_btnWrite_clicked();           // 写入文件按钮点击
    void on_btnstreamRead_clicked();      // 流方式读取文件按钮点击
    void on_btnstreamWrite_clicked();     // 流方式写入文件按钮点击
    void on_btnQFileDialog_clicked();     // 打开文件对话框按钮点击
    void on_btnSe_clicked();              // 多选文件按钮点击
    void on_btnSave_clicked();            // 保存文件按钮点击
    void oncurrentIndexChanged(int index); // 下拉框选择改变时触发
  • 这些都是按钮或其他控件触发的槽函数;
  • 函数命名格式为 on_<控件名>_<信号名>(),这是 Qt 的自动连接机制要求的命名方式;
  • 当你在 .ui 文件中设置了对应控件的 objectName 名称后,Qt 会自动将这些函数与控件的信号连接起来。

私有成员变量:UI 界面指针

private:
    Ui::Widget *ui;
  • ui 是指向由 .ui 文件生成的界面类的指针;
  • 通过 ui->xxx 可以访问界面上的控件(如按钮、文本框等);
  • 在构造函数中会调用 ui->setupUi(this); 来初始化界面。

结束头文件卫士

#endif // WIDGET_H
  • 与最开始的 #ifndef WIDGET_H 配套使用,结束头文件保护。

✅ 总结结构图

部分内容
头文件卫士#ifndef / #define / #endif
引入头文件<QWidget><QDebug>
UI 前置声明namespace Ui { class Widget; }
类定义class Widget : public QWidget
支持 Qt 特性Q_OBJECT 宏
构造/析构函数初始化窗口、释放资源
注释掉的信号与槽mysignal()myslot() 等
控件相关槽函数7 个按钮和下拉框的响应函数
UI 成员指针Ui::Widget *ui;,用于操作界面控件

💡 小贴士

  • 如果你在 .ui 文件中添加了新的按钮,并想让它触发某个函数,请确保:
    • 控件名(objectName)正确;
    • 函数名格式匹配 on_<objectName>_<signalName>()
    • 在 .h 中声明为 private slots:
    • 在 .cpp 中实现该函数逻辑。

如果你希望我帮你:

  • 补全对应的 .cpp 文件;
  • 添加新的功能;
  • 优化代码结构;
  • 或者美化界面布局;

都可以继续提问 😊

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

这段代码是 Qt 桌面应用程序的入口文件 main.cpp,它是程序运行的起点。下面我为你逐行加上详细的中文注释,并解释其作用和原理。


📄 代码 + 中文注释

#include "widget.h"
  • 引入自定义窗口类 Widget 的头文件;
  • 这个类是你在 .ui 文件中设计的主窗口界面所对应的 C++ 类;
  • 包含了控件声明、槽函数等信息。
#include <QApplication>
  • 引入 Qt 提供的应用程序管理类 QApplication
  • 每个基于 Qt 的 GUI 应用都必须有一个 QApplication 对象;
  • 它负责初始化图形系统、处理事件循环、接收命令行参数等。

int main(int argc, char *argv[])
{
  • 程序的主函数入口;
  • argc:命令行参数数量;
  • argv:命令行参数数组(如:--style fusion);
    QApplication a(argc, argv);
  • 创建一个 QApplication 对象 a
  • 它会完成以下工作:
    • 初始化 Qt 内部资源;
    • 设置平台相关的图形支持;
    • 处理命令行参数(例如设置样式、字体等);
  • 每个 Qt GUI 程序只能有一个 QApplication 实例。
    Widget w;
  • 创建一个 Widget 类的对象 w
  • 这是你自己设计的主窗口;
  • 如果你使用了 Qt Designer 设计 .ui 文件,那么这个窗口就是你拖拽出来的界面布局。
    w.show();
  • 调用 show() 方法将窗口显示出来;
  • 默认情况下,Qt 控件是隐藏状态;
  • 必须调用 show() 才能让用户看到窗口。
    return a.exec();
  • 启动 Qt 的主事件循环;
  • exec() 是一个阻塞函数,它会一直运行直到所有窗口关闭或调用了 QApplication::quit()
  • 在此期间,Qt 会不断监听并处理各种事件:
    • 鼠标点击
    • 键盘输入
    • 定时器事件
    • 窗口重绘等

✅ 总结流程图

程序启动
│
├─ 创建 QApplication 对象 → 初始化 Qt 环境
│
├─ 创建主窗口对象 Widget w
│
├─ 显示窗口 w.show()
│
└─ 进入事件循环 a.exec() ───→ 等待用户交互
                             │
                             └── 用户关闭窗口 → 退出循环 → 返回 main() → 程序结束

💡 小贴士

技巧说明
设置窗口标题在 Widget 构造函数中添加 setWindowTitle("我的 Qt 程序");
设置窗口大小使用 resize(800, 600);
添加图标使用 setWindowIcon(QIcon(":/icon.png"));
全屏/最大化使用 showFullScreen() 或 showMaximized()

🧩 常见问题

Q1:为什么不能使用 QCoreApplication

  • 因为你的程序是 GUI 程序,需要图形界面支持;
  • QCoreApplication 只适用于控制台程序或非图形程序;
  • GUI 程序必须使用 QApplication

Q2:可以没有 QApplication 吗?

  • 不可以,GUI 程序必须有且只有一个 QApplication 实例;
  • 否则程序无法正常运行。

如果你希望我帮你:

  • 补全 widget.cpp 和 widget.h
  • 添加菜单栏、工具栏;
  • 实现按钮点击功能;
  • 或者美化界面布局;

都可以继续提问 😊

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Widget</class>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>971</width>
    <height>683</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
  <widget class="QPushButton" name="btnRead">
   <property name="geometry">
    <rect>
     <x>70</x>
     <y>90</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="text">
    <string>读取文件</string>
   </property>
  </widget>
  <widget class="QPushButton" name="btnWrite">
   <property name="geometry">
    <rect>
     <x>190</x>
     <y>90</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="text">
    <string>写入文件</string>
   </property>
  </widget>
  <widget class="QPushButton" name="btnstreamRead">
   <property name="geometry">
    <rect>
     <x>310</x>
     <y>90</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="text">
    <string>Stream读取</string>
   </property>
  </widget>
  <widget class="QPushButton" name="btnstreamWrite">
   <property name="geometry">
    <rect>
     <x>430</x>
     <y>90</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="text">
    <string>Stream写入</string>
   </property>
  </widget>
  <widget class="QPushButton" name="btnQFileDialog">
   <property name="geometry">
    <rect>
     <x>70</x>
     <y>180</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="text">
    <string>打开文件选择框</string>
   </property>
  </widget>
  <widget class="QPushButton" name="btnSe">
   <property name="geometry">
    <rect>
     <x>190</x>
     <y>180</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="text">
    <string>分步骤打开</string>
   </property>
  </widget>
  <widget class="QPushButton" name="btnSave">
   <property name="geometry">
    <rect>
     <x>310</x>
     <y>180</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="text">
    <string>保存文件</string>
   </property>
  </widget>
  <widget class="QComboBox" name="comboBox">
   <property name="geometry">
    <rect>
     <x>430</x>
     <y>180</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <item>
    <property name="text">
     <string>GBK</string>
    </property>
   </item>
   <item>
    <property name="text">
     <string>GB2312</string>
    </property>
   </item>
   <item>
    <property name="text">
     <string>UTF-8</string>
    </property>
   </item>
   <item>
    <property name="text">
     <string>ANSI</string>
    </property>
   </item>
   <item>
    <property name="text">
     <string>UTF-16</string>
    </property>
   </item>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

你提供的这段 XML 是 Qt 项目中由 Qt Designer 生成的 .ui 文件,它描述了你的主窗口界面布局和控件信息。


📄 概述

这个 .ui 文件定义了一个名为 Widget 的窗口类(继承自 QWidget),包含以下控件:

控件名类型功能
btnReadQPushButton用于读取文件内容
btnWriteQPushButton用于写入文件内容
btnstreamReadQPushButton使用 QTextStream 流方式读取文件
btnstreamWriteQPushButton使用 QTextStream 流方式写入文件
btnQFileDialogQPushButton打开文件选择对话框
btnSeQPushButton多选文件并显示路径
btnSaveQPushButton保存文件到指定路径
comboBoxQComboBox下拉列表,用于选择编码格式

✅ 界面结构解析

主窗口设置

<widget class="QWidget" name="Widget">
 <property name="geometry">
  <rect>
   <x>0</x>
   <y>0</y>
   <width>971</width>
   <height>683</height>
  </rect>
 </property>
 <property name="windowTitle">
  <string>Widget</string>
 </property>
  • 窗口大小为 971x683
  • 标题为 "Widget"

按钮控件

btnRead —— 读取文件按钮
<widget class="QPushButton" name="btnRead">
 <property name="geometry">
  <rect>
   <x>70</x>
   <y>90</y>
   <width>101</width>
   <height>51</height>
  </rect>
 </property>
 <property name="text">
  <string>读取文件</string>
 </property>
</widget>
  • 坐标位置:(70, 90)
  • 尺寸:101x51
  • 显示文字:“读取文件”
btnWrite —— 写入文件按钮
<widget class="QPushButton" name="btnWrite">
 <property name="geometry">
  <rect>
   <x>190</x>
   <y>90</y>
   <width>101</width>
   <height>51</height>
  </rect>
 </property>
 <property name="text">
  <string>写入文件</string>
 </property>
</widget>
  • 相邻排列在右侧
  • 功能:向文件写入数据
btnstreamRead —— 使用流方式读取文件
<widget class="QPushButton" name="btnstreamRead">
 ...
 <property name="text">
  <string>Stream读取</string>
 </property>
</widget>
  • 使用 QTextStream 实现文本逐行读取
btnstreamWrite —— 使用流方式写入文件
<widget class="QPushButton" name="btnstreamWrite">
 ...
 <property name="text">
  <string>Stream写入</string>
 </property>
</widget>
  • 使用 QTextStream 向文件写入内容
btnQFileDialog —— 打开文件选择框
<widget class="QPushButton" name="btnQFileDialog">
 ...
 <property name="text">
  <string>打开文件选择框</string>
 </property>
</widget>
  • 弹出 QFileDialog,让用户选择一个文件进行操作
btnSe —— 分步骤打开多个文件
<widget class="QPushButton" name="btnSe">
 ...
 <property name="text">
  <string>分步骤打开</string>
 </property>
</widget>
  • 支持多选文件,并将路径打印到控制台
btnSave —— 保存文件
<widget class="QPushButton" name="btnSave">
 ...
 <property name="text">
  <string>保存文件</string>
 </property>
</widget>
  • 弹出保存文件对话框,写入用户输入的内容

下拉列表框:comboBox

<widget class="QComboBox" name="comboBox">
 <property name="geometry">
  <rect>
   <x>430</x>
   <y>180</y>
   <width>101</width>
   <height>51</height>
  </rect>
 </property>
 <item><property name="text"><string>GBK</string></property></item>
 <item><property name="text"><string>GB2312</string></property></item>
 <item><property name="text"><string>UTF-8</string></property></item>
 <item><property name="text"><string>ANSI</string></property></item>
 <item><property name="text"><string>UTF-16</string></property></item>
</widget>
  • 可选项包括常见的字符编码格式;
  • 当前值变化时会触发 oncurrentIndexChanged(int index) 槽函数;
  • 输出当前索引和对应的编码名称到调试输出窗口。

🔄 连接关系

<connections/>
  • 当前没有手动连接任何信号与槽;
  • 所有连接都是通过命名规范自动完成的(如 on_btnRead_clicked());

✅ 总结功能图

+-------------------------------------------------------+
|                       Widget                          |
|                                                       |
| [读取文件] [写入文件] [Stream读取] [Stream写入]       |
|                                                       |
| [打开文件选择框] [分步骤打开] [保存文件] [下拉编码框] |
|                                                       |
+-------------------------------------------------------+

💡 小贴士

技巧说明
更改控件名在 Qt Designer 中右键控件 → “Change objectName”
添加新控件拖拽即可,Qt 会自动生成代码
自动连接机制遵循 on_<objectName>_<signalName>() 格式即可
调试输出使用 qDebug() << "..." 输出调试信息
文件路径推荐使用相对路径或 QStandardPaths 获取系统路径

如果你希望我帮你:

  • 补全 .cpp 和 .h 文件;
  • 添加新的控件和功能;
  • 实现更复杂的逻辑(如多线程、文件监控等);
  • 或者美化界面布局;

都可以继续提问 😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范纹杉好好生活工作

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值