2016-05-06 3 views
0

Я пытаюсь хранить QStrings в QCache, но после того, как я закрыть приложение и запустить его снова, кэш снова пуст.QCache ничего не хранить в Qt 5.6

вот мой каст код:

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

Смежные вопросы