我正在使用qt的撤消框架,它使用qundocommand來做一些應用程序支持撤消。 有沒有一種簡單的方法可以用來將這些qundocommand保存到文件並重新加載?如何保存qundocommand文件並重新加載?
2
A
回答
1
沒有內置的方法。我認爲在會話之間保存撤消堆棧並不常見。您必須通過迭代堆棧中的命令來自行序列化命令,並使用QDataStream保存每個人的唯一數據。它可能是這個樣子:
...
dataStream << undoStack->count(); // store number of commands
for (int i = 0; i < undoStack->count(); i++)
{
// store each command's unique information
dataStream << undoStack->command(i)->someMemberVariable;
}
...
然後你會再次使用QDataStream將數據反序列化回QUndoCommands。
您可以使用QFile處理文件管理。這裏描述
1
使用Qt的序列:
然後你QUndoCommands中您可以使用一個臨時文件,將數據寫入到它:
http://qt-project.org/doc/qt-4.8/qtemporaryfile.html
然而,這可能導致你是一個問題,因爲每個文件都保持打開,所以在某些平臺(Linux)上,你可能會用完打開的文件句柄。
爲了解決這個問題,你不得不創造它處理你的命令,一些其他的工廠類型的對象 - 那麼這可能在一個QTemporaryFile參考自動傳遞。此工廠/ QUndoCommand看護者對象必須具有與QUndoCommands相同的生命週期。如果沒有,那麼臨時文件將從磁盤中刪除,並且您的QUndoCommands會中斷。
你可以做的另一件事是使用QUndoCommand作爲你真正的撤消命令的代理 - 這意味着你可以節省相當多的內存,因爲當你的撤消命令被保存到文件時,你可以刪除內部指針/設置它爲空。然後再恢復它。
相關問題
- 1. 保存並重新加載directionService.route響應
- 2. python對象保存並重新加載
- 3. textbox/form保存並重新加載
- 4. 保存Android MapView並重新加載
- 5. 如何保存並加載複選框,如保存文件 - php
- 6. 如何確保重新加載緩存的JavaScript和CSS文件?
- 7. 如何在文件保存時觸發重新加載firefox?
- 8. 如何使用SharedObject保存並重新加載當前幀
- 9. 如何使用ALAsset保存並重新加載圖像?
- 10. 如何保存並重新加載列表?
- 11. 保存並重新加載已保存的rdlc報告
- 12. 保存用戶控件屬性並重新加載
- 13. 批處理文件:保存並加載
- 14. 加載並保存文件在Unity,C#
- 15. 保存並加載fft到.mat文件
- 16. 無法保存並加載plist文件
- 17. 加載並保存到txt文件
- 18. C# - 保存DataGridView文件並加載
- 19. swipl:如何重新加載文件
- 20. 如何重新加載JavaScript文件
- 21. Drupal如何重新加載JavaScript文件
- 22. 如何重新加載更改文件?
- 23. 重新加載Suave應用程序文件保存
- 24. DiscordJS,Gulp重新加載殭屍文件保存?
- 25. 保存文件時自動重新加載瀏覽器?
- 26. 如何保存並加載文件中的故事流節點?
- 27. 如何保存並加載QJsonDocument到文件?
- 28. 如何將HashMap保存到文件並加載它
- 29. 如何保存文件中的變量更新和加載
- 30. 如何熱重新加載文件保存在Leiningen的命名空間REPL
寫入磁盤還有其他一些原因 - 如果您有500個撤消命令,它會增加內存使用量。 – paulm