QT开发之文件操作

1、保存数据

QString Path = QFileDialog::getSaveFileName(this,
                                                tr("Save File"),
                                                tr(""),
                                                "Files(*.txt)",
                                                0);

    if (!Path.isNull())
    {
        //用IODevice方式保存文本文件
        QFile aFile(Path);
        if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))
            return;

        QString str = "123456789";
        QByteArray  strBytes=str.toUtf8();//转换为字节数组
        aFile.write(strBytes,strBytes.length());  //写入文件
        aFile.close();
}

2、保存成二进制

//writefile为QFile

QByteArray allData;

    allData.resize(0);

    //将整个结构体全部保存
    for(int i = 0; i < sizeof(GlobalDataDef); i++)
    {
        allData.append(*(&GlobalData.reciveState + i));
    }

    /*写文件头数据*/
    if (!writefile.write(allData))
    {
        /*写失败需要关闭文件*/
        writefile.close();
        return false;
    }

    writefile.waitForBytesWritten(1000);//等待写文件时间

    writefile.close();

3、打开文件数据

QString Path = QFileDialog::getOpenFileName(this,
                                                tr("Open File"),
                                                tr(""),
                                                "Files(*.bf)",
                                                0);

    if (!Path.isNull())
    {
        if(!GetFileHeadData(Path))
        {
            //Open error
        }
    }
    else
    {

    }
bool MainWindow::GetFileHeadData(QString Path)
{
    QFile readfile(Path);
    if (!readfile.open(QIODevice::ReadOnly))
    {
        //打开文件失败
        return false;
    }

    if (readfile.size() < 1024)
        return false;

    QByteArray  allData = readfile.readAll();
    qDebug() << "data size = " << allData.size();
    if (allData.isEmpty())
    {
        readfile.close();
        return false;
    }
    readfile.close();
    for (int i = 0; i < sizeof(GlobalDataDef); i++)
    {
        *((uint8_t *)&GlobalData.reciveState + i) = (uint8_t)allData.at(i);
    }

 
    return true;
}

4、QML中使用文件对话框

FileDialog {
            id: fileDialog;
            title: qsTr("Open File");
            folder: shortcuts.desktop // 桌面
            nameFilters: [
                "Files(*.mr)"
            ];
            onAccepted:
            {
                console.log("You chose: " + fileUrl)//路径,需要去掉file:///
            }
        }

打开对话框:

fileDialog.open();

5、多选文件对话框

QStringList str_path_list = QFileDialog::getOpenFileNames(this,
                  tr("Open File"),
                  tr(""),
                  tr("Files(*.mp3;*.mp4;*.wav;)"));

if(str_path_list.size() > 0)
{
    QString name_data[100];


    for(int i = 0; i < str_path_list.size(); i++)
    {
         name_data[i] = str_path_list[i];//文件名称
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值