C++ QT中文件的读写操作(UI界面)

利用UI简单的创建一个文件读写的窗口。UI界面如图所示:

read和write是两个按钮(按钮名称brbw),下面是一个文本编辑区。
read按钮的槽函数(自动生成的槽函数 read -> 右击 -> 转到槽 -> clicked() -> ok)

void Widget::on_br_clicked()//read的槽函数
{
    //文件对话框
    QString path=QFileDialog::getOpenFileName(this,"OPEN","../","TXT(*.txt)");//设置文件路径 文件格式

    if(path.isEmpty()==false){//路径正确
        //创建文件对象 并且关联起来
        QFile file(path);
        bool isok=file.open(QIODevice::ReadOnly);//利用只读模式打开文件
        if(isok){//打开成功
            //读取文件内容
            //1.一次性读取 file.readAll()
            QByteArray array=file.readAll();//一次性读取
            ui->textEdit->setText(QString(array));//在文本区域显示

            //2.行读取 file.readLine()
//            QByteArray array1;
//            while (file.atEnd()==false) {
//                array1+=file.readLine();//换行符号也是读取的
//            }
//            ui->textEdit->setText(QString(array));//在文本区域显示

        }
        file.close();
    }
}

read按钮的槽函数(自动生成的槽函数 write -> 右击 -> 转到槽 -> clicked() -> ok)

void Widget::on_bw_clicked()//write的槽函数
{
    //文件对话框
    QString path=QFileDialog::getSaveFileName(this,"SAVE","../","TXT(*.txt)");//设置保存文件的路径 文件格式
    if(path.isEmpty()==false){//路径正确
        //创建文件对象 并且关联起来
        QFile file(path);
        bool isok=file.open(QIODevice::WriteOnly);//利用只读模式打开文件
        if(isok){//打开成功
            //读取编辑区的内容
            QString str=ui->textEdit->toPlainText();//获取编辑区的内容
            //将内容写入文件
            //1.QString -> string -> char *
            file.write(str.toStdString().data());//c_str

            //2.SQtring -> QByteArray
            //file.write(str.toUtf8());//utf8编码
        }
        file.close();//关闭文件

    }
}

效果展示
1.读文件

2.写文件

本文福利, 免费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓ 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt5进行串口通信可以使用QSerialPort类。为了避免阻塞UI线程,可以使用Qt的信号和槽机制来处理串口的读写。下面是一个简单的例子: ```cpp // 在头文件声明QSerialPort对象和相关变量 #include <QtSerialPort/QSerialPort> #include <QByteArray> class SerialPort : public QObject { Q_OBJECT public: explicit SerialPort(QObject *parent = nullptr); signals: void dataReceived(const QByteArray& data); public slots: void writeData(const QByteArray& data); void readData(); private: QSerialPort m_serialPort; }; // 在源文件实现SerialPort类的相关函数 Serial::SerialPort(QObject *parent) : QObject(parent) { // 设置串口参数 m_serialPort.setBaudRate(QSerialPort::Baud9600); m_serialPort.setDataBits(QSerialPort::Data8); m_serialPort.setParity(QSerialPort::NoParity); m_serialPort.setStopBits(QSerialPort::OneStop); m_serialPort.setFlowControl(QSerialPort::NoFlowControl); // 连接信号和槽 QObject::connect(&m_serialPort, &QSerialPort::readyRead, this, &SerialPort::readData); } void SerialPort::writeData(const QByteArray& data) { // 写入数据 m_serialPort.write(data); } void SerialPort::readData() { // 读取数据 QByteArray data = m_serialPort.readAll(); // 发送信号 emit dataReceived(data); } ``` 在主窗口,可以创建SerialPort对象,并连接其信号和槽: ```cpp // 在主窗口的头文件声明SerialPort对象 #include "serialport.h" class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); private slots: void on_pushButton_clicked(); void onDataReceived(const QByteArray& data); private: Ui::MainWindow *ui; SerialPort m_serialPort; }; // 在主窗口的源文件实现SerialPort对象的相关槽函数 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 连接信号和槽 QObject::connect(&m_serialPort, &SerialPort::dataReceived, this, &MainWindow::onDataReceived); } void MainWindow::on_pushButton_clicked() { // 写入数据 QByteArray data = "Hello World!"; m_serialPort.writeData(data); } void MainWindow::onDataReceived(const QByteArray& data) { // 处理接收到的数据 ui->textEdit->append(data); } ``` 在上面的例子,当主窗口的按钮被点击时,调用了SerialPort对象的writeData函数,将数据写入串口。当SerialPort对象接收到数据时,会发出dataReceived信号,主窗口的onDataReceived函数会被调用,处理接收到的数据,并将其显示在UI界面上。这样就可以实现串口通信,同时不会阻塞UI线程了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值