QT C ++ Сохранить файл из БД в мою файловую систему

Мне нужна помощь, я занимался исследованиями и до сих пор ничего, я создаю приложение в QT C ++, чтобы позволить пользователю обмениваться файлами (.mp3, jpg и .txt), как можно получить файл из таблицы для его хранения в файловой системе?

// getting file from DB
QByteArray fileByteArray = dbm.GetSharedFile(fileNameSelected);

QFileDialog dialog;
dialog.setOptions(QFileDialog::DontUseNativeDialog);  // with or without this
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setDirectory(".");
dialog.selectFile(fileNameSelected);   // magic happens here
int ret = dialog.exec();

if (ret == QDialog::Accepted)
{
QFile f(dialog.directory ().absolutePath());
f.open( QIODevice::WriteOnly );
f.write(fileByteArray);
????
???
}

Я могу получить файл из таблицы, но после этого я не знаю, как сохранить его с помощью qfiledialog. с наилучшими пожеланиями

0

Решение

Есть статический член на QFileDialog учебный класс:

QString QFileDialog::getSaveFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)

После того, как вы получите имя файла с этим методом, вы должны проверить строку на пустое, а затем сделать с файлом, как вы делаете

Пример:

QString fname =QFileDialog::getSaveFileName(); //you can set some params
if (!fname.isEmpty()) {
QFile f(fname);
if(f.open(QIODevice::WriteOnly))
f.write(fileByteArray);
}
0

Другие решения

Как вы можете видеть, байтовый массив файла не пустой …. я, возможно, сделал что-то не так ….

......
......
qDebug() << "row selected" << rowSelected;
qDebug() << "file name to download" << fileNameSelected;

QByteArray fileByteArray = dbm.GetSharedFile(fileNameSelected);

qDebug() << fileByteArray.size(); // Checking the file byte array size

QFileDialog dialog;QString fname =QFileDialog::getSaveFileName(); //you can set some params
if (!fname.isEmpty()) {
QFile f(fname);
if(f.open(QIODevice::WriteOnly))
f.write(fileByteArray);
}

qDebug() << fileByteArray.size(); // file size

}

0

По вопросам рекламы [email protected]