2016-01-13 88 views
0

我需要幫助,我一直在研究和到現在爲止沒有什麼,我在QTÇ創建一個應用程序++,允許用戶共享文件(MP3播放,JPG和.txt ),如何從tableview中獲取文件以將其存儲在文件系統中?QT C++存儲文件到我的文件系統

// 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); 
     ???? 
     ??? 
} 

我可以從tableview中的文件,但之後,我不知道如何使用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

我會盡快我回家試試,並且可以將其轉換成MP3,還是應該將其保存在fileByteArray?這是因爲我需要從數據庫下載它,並保存它的用戶計算機,成爲最終的產品需要在MP3,或任何他們可以聽的擴展。 – Afreeca

+0

正在工作,正在保存文件,但是是一個空文件。 – Afreeca

+0

確定數據庫查詢後你的字節數組是否爲空? – Evgeny

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 

}