• ChatGPT/文心一言在代码学习中的运用:代码注释|结构解析|生成代码|......

输入:

请写QT程序,实现选择文件路径并存储界面输入的文本,同时统计文本中的汉字、数字和字母个数,并记录存储时间。

输出(文心一言):

 #include <QFileDialog>  
 #include <QLineEdit>  
 #include <QMessageBox>  
 #include <QTime>  
 #include <QTextStream>  
 
 void saveTextInfo(QString text) {  
     // 存储文本信息  
     static QMap<QString, int> textInfo; 
     // 统计汉字、数字、字母个数  
     int chineseCount = text.count(QRegExp("[\\u4e00-\\u9fa5]+"));  
     int digitCount = text.count(QRegExp("[0-9]+"));  
     int letterCount = text.count(QRegExp("[a-zA-Z]+"));  
 
     // 获取当前时间   
     QTime now = QTime::currentTime();  
     QString timeStr = now.toString("yyyy-MM-dd HH:mm:ss");     
     
     // 存储统计结果和时间到字典中  
     textInfo["汉字个数"] = chineseCount;  
     textInfo["数字个数"] = digitCount;  
     textInfo["字母个数"] = letterCount;  
     textInfo["存储时间"] = timeStr;  
     // 打印统计结果  
 
     for (auto& p : textInfo) {  
         qDebug() << p.first << ": " << p.second;  
     }  
 }  
   
 void selectFileAndSaveText() {  
     // 创建文件对话框  
     QString fileName = QFileDialog::getSaveFileName(nullptr, "选择文件", "", "文本文件 (*.txt)");  
     if (fileName.isEmpty()) {  
         return;  
     }  
 
     // 创建输入框  
     QLineEdit* inputBox = new QLineEdit;  
     inputBox->setPlaceholderText("请输入文本");  
     QString text = inputBox->text();  
 
     // 保存文本信息并显示消息框  
     saveTextInfo(text);  
     QMessageBox::information(nullptr, "文本信息", "汉字个数: " + QString::number(textInfo["汉字个数"]) + "\n"  
                                                    "数字个数: " + QString::number(textInfo["数字个数"]) + "\n"  
                                                    "字母个数: " + QString::number(textInfo["字母个数"]) + "\n"  
                                                    "存储时间: " + textInfo["存储时间"]);  
 }

在这个程序中,我们使用了Qt的文件对话框和输入框控件。通过调用QFileDialog::getSaveFileName函数打开文件对话框,让用户选择要保存的文件。然后创建输入框控件,通过QLineEdit::text函数获取用户输入的文本。接着调用saveTextInfo函数统计文本中的汉字、数字和字母个数,并记录存储时间。最后,使用QMessageBox::information函数显示一个消息框,展示统计结果。

输出(ChatGPT):

#ifndef TEXTFILESAVER_H
#define TEXTFILESAVER_H

#include <QWidget>
#include <QTextEdit>
#include <QPushButton>

class TextFileSaver : public QWidget
{
    Q_OBJECT

public:
    TextFileSaver(QWidget *parent = nullptr);

private slots:
    void browseFile();
    void saveToFile();

private:
    QTextEdit *inputText;
    QPushButton *browseButton;
    QPushButton *saveButton;
    QString selectedFilePath;
    int chineseCount;
    int digitCount;
    int letterCount;
};

#endif // TEXTFILESAVER_H
#include "TextFileSaver.h"
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QMessageBox>

// 构造函数的实现
TextFileSaver::TextFileSaver(QWidget *parent) : QWidget(parent)
{
    inputText = new QTextEdit(this);
    browseButton = new QPushButton("浏览", this);
    saveButton = new QPushButton("保存", this);

    connect(browseButton, &QPushButton::clicked, this, &TextFileSaver::browseFile);
    connect(saveButton, &QPushButton::clicked, this, &TextFileSaver::saveToFile);

    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(inputText);
    QHBoxLayout *buttonLayout = new QHBoxLayout();
    buttonLayout->addWidget(browseButton);
    buttonLayout->addWidget(saveButton);
    layout->addLayout(buttonLayout);

    chineseCount = 0;
    digitCount = 0;
    letterCount = 0;
}

// 浏览文件的槽函数的实现
void TextFileSaver::browseFile()
{
    QString filePath = QFileDialog::getSaveFileName(this, "选择文件", QDir::homePath(), "文本文件 (*.txt)");
    if (!filePath.isEmpty())
    {
        selectedFilePath = filePath;
    }
}

// 保存文本到文件的槽函数的实现
void TextFileSaver::saveToFile()
{
    if (selectedFilePath.isEmpty())
    {
        QMessageBox::warning(this, "警告", "请选择文件路径");
        return;
    }

    QString text = inputText->toPlainText();
    for (QChar c : text)
    {
        if (c.isDigit())
        {
            digitCount++;
        }
        else if (c.isLetter())
        {
            letterCount++;
        }
        else if (c.isChinese())
        {
            chineseCount++;
        }
    }

    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeString = currentTime.toString("yyyy-MM-dd hh:mm:ss");

    QFile file(selectedFilePath);
    if (file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        QTextStream out(&file);
        out << "文本内容:" << endl << text << endl;
        out << "汉字个数:" << chineseCount << endl;
        out << "数字个数:" << digitCount << endl;
        out << "字母个数:" << letterCount << endl;
        out << "存储时间:" << timeString << endl;
        file.close();
        QMessageBox::information(this, "成功", "文本已保存到文件");
    }
    else
    {
        QMessageBox::critical(this, "错误", "无法保存文件");
    }
}

这段代码创建了一个基于QT框架的简单界面,包括一个文本框用于输入文本,一个“浏览”按钮用于选择文件路径,以及一个“保存”按钮用于将文本和相关信息保存到文件中。函数会统计文本中的汉字、数字和字母数量,记录存储时间,并将所有信息保存到用户选择的文件中。请注意,需要添加QT的头文件和链接QT库来编译这个程序。


输入:我是一个初学者,你能否给我介绍一下程序的要点:

输出(ChatGPT):当然可以!我将解释这个程序的关键要点,以帮助你理解它的功能和结构。

1. 包含头文件和类定义:

#include "TextFileSaver.h"
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QMessageBox>
  • 这些#include指令用于包含所需的QT库头文件,以及自定义的TextFileSaver类的头文件。

2. TextFileSaver 类定义:

class TextFileSaver : public QWidget
{
    Q_OBJECT

public:
    TextFileSaver(QWidget *parent = nullptr);

private slots:
    void browseFile();
    void saveToFile();

private:
    QTextEdit *inputText;
    QPushButton *browseButton;
    QPushButton *saveButton;
    QString selectedFilePath;
    int chineseCount;
    int digitCount;
    int letterCount;
};
  • 这部分定义了一个名为TextFileSaver的自定义类,它继承自QT的QWidget类。
  • Q_OBJECT宏用于支持QT的信号和槽机制。
  • 类包含了构造函数以及两个私有槽函数(browseFilesaveToFile),用于处理用户交互和文件操作。
  • 类还包含了一些成员变量,如文本编辑框 (QTextEdit)、浏览按钮 (QPushButton)、保存按钮 (QPushButton) 以及一些用于统计的变量。

3. 构造函数的实现:

TextFileSaver::TextFileSaver(QWidget *parent) : QWidget(parent)
{
    // 创建界面元素
    inputText = new QTextEdit(this);
    browseButton = new QPushButton("浏览", this);
    saveButton = new QPushButton("保存", this);

    // 连接按钮的槽函数
    connect(browseButton, &QPushButton::clicked, this, &TextFileSaver::browseFile);
    connect(saveButton, &QPushButton::clicked, this, &TextFileSaver::saveToFile);

    // 创建布局
    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(inputText);
    QHBoxLayout *buttonLayout = new QHBoxLayout();
    buttonLayout->addWidget(browseButton);
    buttonLayout->addWidget(saveButton);
    layout->addLayout(buttonLayout);

    // 初始化计数器
    chineseCount = 0;
    digitCount = 0;
    letterCount = 0;
}
  • 构造函数初始化了类的成员变量和界面元素。
  • 创建了文本编辑框 (QTextEdit) 和两个按钮 (QPushButton)。
  • 使用connect函数将按钮的点击事件连接到槽函数,以响应用户交互。
  • 创建了布局来组织界面元素。
  • 初始化了计数器变量。

4. browseFile 槽函数的实现:

void TextFileSaver::browseFile()
{
    QString filePath = QFileDialog::getSaveFileName(this, "选择文件", QDir::homePath(), "文本文件 (*.txt)");
    if (!filePath.isEmpty())
    {
        selectedFilePath = filePath;
    }
}
  • 这个槽函数用于打开文件选择对话框,允许用户选择要保存文件的路径。
  • 选择的文件路径存储在selectedFilePath成员变量中。

5. saveToFile 槽函数的实现:

void TextFileSaver::saveToFile()
{
    if (selectedFilePath.isEmpty())
    {
        QMessageBox::warning(this, "警告", "请选择文件路径");
        return;
    }

    QString text = inputText->toPlainText();
    for (QChar c : text)
    {
        if (c.isDigit())
        {
            digitCount++;
        }
        else if (c.isLetter())
        {
            letterCount++;
        }
        else if (c.isChinese())
        {
            chineseCount++;
        }
    }

    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeString = currentTime.toString("yyyy-MM-dd hh:mm:ss");

    QFile file(selectedFilePath);
    if (file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        QTextStream out(&file);
        out << "文本内容:" << endl << text << endl;
        out << "汉字个数:" << chineseCount << endl;
        out << "数字个数:" << digitCount << endl;
        out << "字母个数:" << letterCount << endl;
        out << "存储时间:" << timeString << endl;
        file.close();
        QMessageBox::information(this, "成功", "文本已保存到文件");
    }
    else
    {
        QMessageBox::critical(this, "错误", "无法保存文件");
    }
}
  • 这个槽函数用于将文本内容保存到用户选择的文件中。
  • 首先,它检查是否已选择文件路径,如果没有则显示警告。
  • 然后,它统计文本中的汉字、数字和字母的个数。
  • 获取当前时间作为存储时间。
  • 打开选定的文件并将文本和统计信息写入文件中。
  • 最后,显示成功或错误的消息框。

这就是这个程序的关键要点。它是一个用于选择文件路径并保存文本的简单QT应用程序,还包括了一些文本统计功能。希望这个解释有助于你更好地理解这个程序的工作原理。如果你有任何问题或需要进一步的解释,请随时提问。


个人使用感受:ChatGPT能够更好的结合上下文,特别是在同一个聊天中。而文心一言在中文理解方面做的更好,并且与ChatGPT3.5相比,文心一言可以获取更新的信息,同时可以生成图片,阅览简单的文件......

(文心一言有个不太喜欢的地方:有字数限制啊喂!)