2011-05-30 57 views
0

我想知道什麼是正在保存我正在處理的應用程序的所有用戶數據的正確方法。該應用程序在QT中。用戶將大量數據輸入到應用程序中,並且每個用戶的數據都不相同。我希望用戶能夠在用戶再次使用它或在另一臺運行該應用程序的計算機上使用該應用程序時,將所有當前數據保存到可由應用程序加載的用戶文件中。保存我的應用程序的用戶數據

什麼是正確和最好的方法來做到這一點?我需要使用xml格式嗎?然後使用QML的xmlreader?或者我只需要創建自己的文件格式,只是使用流來讀取所有內容。文件中的數據將需要標記,因爲它需要將數據放在gui上的特定位置。用戶可以選擇動態創建包含特定信息的框和選項卡。

如果您需要更多信息,請讓我知道。


簡單例子:

我不僅讀GUI的位置。 但這些內容。對於 實例。用戶可以創建包含編輯文本框的選項卡 。這些選項卡與列表中的項目 相關聯。當用戶點擊列表中的項目時,用戶 將顯示一整套 新選項卡。每個標籤都有一些 編輯表單。該文件將需要 包含列表中的內容,用戶在該列表中的每個項目 下創建了哪些標籤 以及與列表中的每個 項目的標籤關聯的每個 標籤的內容。

回答

2

在本質上,是的,你會創建自己的文件格式,但實際的內容可以是任何你需要的方案的XML。然後你可以使用Qt的內置XML處理功能來解析文本(我個人更喜歡DOM模型,所以我使用QDomDocument作爲我的基礎),你只需要擔心解析的東西並從各個節點。

如果我沒有記錯的話,Qt框架有一些很棒的XML樣本,這些樣本幫助我幾乎立即開始工作。希望他們幫助!

+0

是的,我在看dom和sax的區別。我需要使用哪一個? DOM似乎將整個文件讀入內存。還有第三種類型的qxmlstreamreader,他們建議使用它。我應該使用哪一個,如果我想打開文件並將所有內容放在gui上,然後只有在有任何更改時纔會要求用戶保存該文件。 – prolink007 2011-05-30 15:43:50

+0

如果您只是閱讀一些GUI位置點,那麼將該XML數據加載到內存中應該沒有問題。就像我說的,我更喜歡DOM,可能是因爲它是更傳統的編程模型。它就像算法一樣,而SAX是一種類似事件的模式。這可能在網絡上效果很好,但對於本地存儲設置來說,這並沒有任何好處。 – Chris 2011-05-30 15:46:25

+0

我不僅閱讀gui位置。但這些內容。例如。用戶能夠創建包含編輯文本框的選項卡。這些選項卡與列表中的項目相關聯。當用戶點擊列表中的一個項目時,用戶將看到一組全新的標籤。每個標籤都有一些編輯形式。該文件需要包含列表中的內容,用戶在該列表中的每個項目下創建了哪些標籤以及與列表中每個項目的標籤關聯的每個標籤的內容。您的方法是否仍然適合這種需求? – prolink007 2011-05-30 15:59:56

2

另一個很好的解決方案是使用內部數據庫實現(在sqlite之上的QSQL)。與xml解決方案相比,它可能更通用(需要時可以更新,可以使用外部密鑰)。 Qt有一些關於使用它的好例子。

就依賴性而言,XML解決方案將要求您使用xml和xmlpatterns(如果您想驗證的東西),而sqlite解決方案將需要QSQL + sqlite插件。我認爲sqlite保證了寫作的原子性,從而防止了數據的腐敗(想想:用戶在保存應用程序時正在殺死它)。

+0

我喜歡SQL解決方案與SQlite(簡單並且可以快速部署到任何地方),主要缺點是XML提供了非跨海直接的父/子/兄弟結構,但對於簡單的結構來說,它絕對是一個不錯的選擇。 Plus同步/更新設置很簡單,不需要在內存中保留任何內容,只需在任何時候直接以db的形式獲取數據。 – vrince 2011-05-30 15:59:03

+0

@vrince:你可以在Chris的帖子上閱讀我的評論,並告訴我你的想法嗎?謝謝,最後一條評論。 – prolink007 2011-05-30 16:00:51

+0

@ prolink007對於用戶更改,您必須跟蹤設置更改以提示用戶保存設置,然後更新相應的db行。我明白你的要求是什麼? – vrince 2011-05-30 16:07:36

相關問題