- 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的信号和槽机制。- 类包含了构造函数以及两个私有槽函数(
browseFile
和saveToFile
),用于处理用户交互和文件操作。 - 类还包含了一些成员变量,如文本编辑框 (
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相比,文心一言可以获取更新的信息,同时可以生成图片,阅览简单的文件......
(文心一言有个不太喜欢的地方:有字数限制啊喂!)