2016-05-06 33 views
0

我試圖在QCache中存儲QStrings但我關閉應用程序並再次運行後,緩存又是空的。Qcache不會在Qt 5.6中存儲任何內容

這裏是我的cpp的代碼:

QString fileName = QFileDialog::getOpenFileName(this, tr("Select a ply file"), homeDir, ".ply (*.ply)"); 
fileCache.insert(12, &fileName); 
qDebug() << QString("# items in cache: ") + QString::number(fileCache.count()); 
ui->file_name_textEdit->insertPlainText(fileName); 

,我已經在頭部聲明緩存:

QCache<int, QString> fileCache; 

我也試圖存儲TMP值,因爲之前我收到此內存泄漏錯誤:

free(): invalid size: 0x00007fffa0d96600 *** 
======= Backtrace: ========= 
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7fed3ebc1725] 
/lib/x86_64-linux-gnu/libc.so.6(+0x7ff4a)[0x7fed3ebc9f4a] 
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7fed3ebcdabc] 
/home/pendar/projects/paintsquad/build/pcl_visualizer(_ZN6QCacheIi7QStringE5clearEv+0x39)[0x473b0f] 
/home/pendar/projects/paintsquad/build/pcl_visualizer(_ZN6QCacheIi7QStringED1Ev+0x19)[0x46f3d1] 
/home/pendar/projects/paintsquad/build/pcl_visualizer(_ZN9PCLViewerD1Ev+0x6a)[0x468532] 
/home/pendar/projects/paintsquad/build/pcl_visualizer(main+0x83)[0x463c79] 
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fed3eb6a830] 
/home/pendar/projects/paintsquad/build/pcl_visualizer(_start+0x29)[0x463b29] 

所以,我想這一點:

QString *tmp = new QString("hi"); 
fileCache.insert(12, tmp); 

現在我沒有收到任何錯誤,但重新啓動時緩存仍爲空!

+5

QCache不會在關閉應用程序時持續存在。 – drescherjm

+1

這就是我所懷疑的,但我無法確定文檔中是否屬於這種情況。我想可能[QSettings](http://doc.qt.io/qt-5/qsettings.html)在這種情況下是一個更好的類。 – Pendar

+0

是'QSettings'將是你想要的選擇.. – drescherjm

回答

0

因此,我需要使用QSettings來代替,這爲關閉和打開應用程序提供了持久性。

+0

或者你可以將你的路徑存儲在一個sqlite數據庫中,我認爲這更適合你的情況。 。 。 – Mike

相關問題