QT文件对话框,将标签内容保存至指定文件

一、主要步骤

首先,通过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;
    }
}
相关推荐
喜欢的名字被抢了14 小时前
Python实战:SQLAlchemy ORM与FastAPI项目集成
开发语言·python·sql·教程·fastapi
从零开始的代码生活_16 小时前
C++ 内存管理:从内存分区到 new/delete 底层原理
开发语言·c++·后端
wabs66616 小时前
关于单调栈【力扣739.每日温度的思考】
java·开发语言
AOwhisky17 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
逆向编程18 小时前
Socket异常连接自动清理方案
开发语言
va学弟19 小时前
Java 网络通信编程(10):Channel 和 Selector
java·开发语言
爱吃提升19 小时前
MATLAB impulse函数脉冲响应完整实操教程
开发语言·matlab
小饕19 小时前
从 1080 Ti 到树莓派 4:Qwen2.5-0.5B Function Calling 端侧部署七步实战
开发语言·人工智能
糯米导航19 小时前
Rust + ONNX Runtime 构建生产级 AI 推理服务:从零到压测
开发语言·人工智能·rust
阿pin19 小时前
Java随笔-ConcurrentHashMap
java·开发语言·哈希算法