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];//文件名称
}
}