一、主要步骤
首先,通过getSaveFileName过去想要保存的文件路径及文件名,其次,通过QFile类实例化一个文件对象,再读取文本框中的内容,最后将读取到的内容写入到文件中,最后关闭文件。
1.txt即为完成上述操作所得文件,文件中的内容为左侧文本框中的内容。
主要功能函数:
cpp
void Widget::on_save_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this,"打开文件","E:/QT/QT/day2_home","All(*.*);;Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");
if(fileName.isNull())
{
QMessageBox::information(this,"提示","未保存选中文件");
}
//实例化一个文件对象
QFile file(fileName); //使用获取到的文件路劲,实例化一个文件对象,后期对文件的操作都是基于该对象
//打开文件
if(!file.open(QFile::ReadWrite))
{
return;
}
//读取textEdit中的内容
QString msg = ui->textEdit->toPlainText();
/将QString转换为QByteArray
char* ch;
QByteArray ba = msg.toLatin1(); // must
ch=ba.data();
//将textEdit中的内容写入到文件中
file.write(ch);
//关闭文件
file.close();
}
二、 对话框的其他功能及代码展示
2.1 字体对话框
通过文件对话框可以设置选中或文本框中全部文字的字体样式,如字体,文字大小,文字粗细等。
主要功能函数:
cpp
void Widget::on_font_clicked()
{
bool ok;
QFont font = QFontDialog::getFont(&ok,QFont("楷体",10,10,false),this,"选择字体");
if (ok)
{
// ui->textEdit->setFont(font); //设置全部字体变化
ui->textEdit->setCurrentFont(font); //设置选中字体变化
} else
{
QMessageBox::information(this,"提示","选中字体未保存");
}
}
2.2 颜色对话框
通过颜色对话框可跟换字体颜色或背景颜色
主要功能函数:
cpp
void Widget::on_color_clicked()
{
//[static] QColor
//QColorDialog::getColor(
//const QColor &initial = Qt::white,
//QWidget *parent = nullptr,
//const QString &title = QString(),
//QColorDialog::ColorDialogOptions options = ColorDialogOptions())
QColor color = QColorDialog::getColor(QColor("white"),this,"选中颜色");
if(color.isValid())
{
ui->textEdit->setTextColor(color);
ui->textEdit->setTextBackgroundColor(color);
} else{
QMessageBox::information(this,"提示","颜色未保存");
}
}
2.3 文件对话框
通过getOpenFileName可以获得选中的文件目录,通过相对于的文件操作可以将文件中的内容显示的文本框中。.
主要功能函数:
cpp
void Widget::on_open_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,"打开文件","E:/QT/QT/day2_home","All(*.*);;Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");
if(fileName.isNull())
{
QMessageBox::information(this,"提示","未保存选中文件");
}
//实例化一个文件对象
QFile file(fileName); //使用获取到的文件路劲,实例化一个文件对象,后期对文件的操作都是基于该对象
//判断文件是否存在
if(!file.exists())
{
return;
}
//打开文件
if(!file.open(QFile::ReadWrite))
{
return;
}
//读取文件中的内容
QByteArray msg = file.readAll();
//将内容展示到 UI界面
ui->textEdit->setText(msg);
//关闭文件
file.close();
}
三、事件处理机制--键盘事件
通过键盘'W''S''A''D'键,实现小球图标的上下左右移动
键盘响应事件
主要功能函数:
cpp
void Widget::keyPressEvent(QKeyEvent *event)
{
switch (event->key())
{
case 'W':
{
if(ui->label->y() <= 0-ui->label->height())
{
ui->label->move(ui->label->x(),this->height());
}
ui->label->move(ui->label->x(),ui->label->y()-10);
}break;
case 'S':
{
if(ui->label->y() >= this->height())
{
ui->label->move(ui->label->x(),0);
}
ui->label->move(ui->label->x(),ui->label->y()+10);
}break;
case 'A':
{
if(ui->label->x() <= 0-ui->label->width())
{
ui->label->move(this->width(),ui->label->y());
}
ui->label->move(ui->label->x()-10,ui->label->y());
}break;
case 'D':
{
if(ui->label->x() >= this->width())
{
ui->label->move(0,ui->label->y());
}
ui->label->move(ui->label->x()+10,ui->label->y());
}break;
}
}