Qt学习笔记第51到60讲
第51讲 记事本实现打开功能
回到第24个功能文件Notepad,给UI中的各个控件添加槽函数。
①开始按钮
void Widget::on_btnOpen_clicked()
{
QString fileName=QFileDialog::getOpenFileName(this,tr("Open File"),
"E:\\6_Qt Projects\\24_Notepad\\files",tr("Text(*.txt *.doc)"));
//QFileDialog限制程序可打开的文件形式为txt文件或者doc文本
ui->textEdit->clear();
//每次打开文件时清除控件区域“textEdit”
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
{
qDebug()<<"file open error";
}
QTextStream in(&file);
in.setCodec("UTF-8");
while(!in.atEnd())
{
QString context=in.readLine();
//qDebug()<<qPrintable(context);
ui->textEdit->append(context);
//将读取到的每行内容通过 append 方法添加到界面的文本编辑框(ui->textEdit)中
}
file.close();
}
实现效果:
依次点击
输出结果为:
再试一下打开另外一个文件:
新内容正确显示,原本的文件内容也已经被删除。
第52讲 记事本实现保存新建文件的功能
本质山是为下面这个按键编写槽函数。
代码示例
void Widget::on_btnSave_clicked()
{
QString fileName=QFileDialog::getSaveFileName(this,tr("Save File"),
"E:\\6_Qt Projects\\24_Notepad\\files\\untitle.txt",tr("Text(*.txt *.doc)"));
QFile file;
file.setFileName(fileName);
if(!(file.open(QIODevice::WriteOnly|QIODevice::Text)))
{
qDebug()<<"failed to open file!"<<endl;
}else{
QTextStream out(&file);
out.setCodec("UTF-8");
QString context=ui->textEdit->toPlainText();
out<<context;
}
file.close();
}
逐步讲解
1.获取保存文件名
QString fileName=QFileDialog::getSaveFileName(this,tr("Save File"),
"E:\\6_Qt Projects\\24_Notepad\\files\\untitle.txt",tr("Text(*.txt *.doc)"));
2.设置文件对象的文件名
QFile file;
file.setFileName(fileName);
3.打开文件并进行错误处理
if(!(file.open(QIODevice::WriteOnly|QIODevice::Text)))
{
qDebug()<<"failed to open file!"<<endl;
}
4.写入文件
else{
QTextStream out(&file);
out.setCodec("UTF-8");
QString context=ui->textEdit->toPlainText();
out<<context;
}
5.关闭文件
第53讲 记事本实现关闭按键
在widget.h文件中,实例化一个QFile类型的对象file,作为widget类的public成员变量。
public:
QFile file;
Widget(QWidget *parent = nullptr);
~Widget();
在为关闭键编写槽函数之前,我们需要先修改打开和保存的槽函数:
void Widget::on_btnOpen_clicked()
{
QString fileName=QFileDialog::getOpenFileName(this,tr("Open File"),
"E:\\6_Qt Projects\\24_Notepad\\files",tr("Text(*.txt *.doc)"));
//QFileDialog限制程序可打开的文件形式为txt文件或者doc文本
ui->textEdit->clear();
//每次打开文件时清除控件区域“textEdit”
//QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
{
qDebug()<<"file open error";
}
QTextStream in(&file);
in.setCodec("UTF-8");
while(!in.atEnd())
{
QString context=in.readLine();
//qDebug()<<qPrintable(context);
ui->textEdit->append(context);
//将读取到的每行内容通过 append 方法添加到界面的文本编辑框(ui->textEdit)中
}
//file.close();
}
void Widget::on_btnSave_clicked()
{
QString fileName=QFileDialog::getSaveFileName(this,tr("Save File"),
"E:\\6_Qt Projects\\24_Notepad\\files\\untitle.txt",tr("Text(*.txt *.doc)"));
//QFile file;
file.setFileName(fileName);
if(!(file.open(QIODevice::WriteOnly|QIODevice::Text)))
{
qDebug()<<"failed to open file!"<<endl;
}else{
QTextStream out(&file);
out.setCodec("UTF-8");
QString context=ui->textEdit->toPlainText();
out<<context;
}
//file.close();
}
将file的重定义与close成员函数注释掉。
最后展示一下关闭键的槽函数示例:
void Widget::on_btnClose_clicked()
{
if(file.isOpen())
{
file.close();
ui->textEdit->clear();
}
}
第54讲 字符编码问题引入
在工程文件中新建一个ANSI编码的文本:
①可以直接通过另存为修改编码格式
②微软的记事本有这个选项卡可以修改编码格式
我在里面写了一句唐诗,再通过我们自己的记事本打开可以发现读取出来的文本完全是乱码。
这是因为我们在这里直接写死了编码形式为UTF-8。