Мне нужна помощь, я занимался исследованиями и до сих пор ничего, я создаю приложение в 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. с наилучшими пожеланиями
Есть статический член на 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);
}
Как вы можете видеть, байтовый массив файла не пустой …. я, возможно, сделал что-то не так ….
......
......
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
}