2012-12-05 43 views
3

我意識到這聽起來可怕的多餘,因爲pickle和QSettings基本上實現了同樣的事情,但讓我解釋一下。是否可以醃製QSettings對象?

我有一個程序可以停靠,調整大小,或以其他方式修改小部件。用戶希望能夠將各種狀態保存爲佈局,並在這些佈局之間切換。佈局保存爲QSettings文件。

要保存一個佈局列表,我想醃一個格式爲{'layoutName':qSettingsFile, 'anotherName':anotherFile}的字典,但是當我嘗試醃一個QSettings文件時,我得到TypeError: the sip.wrapper type cannot be instantiated or sub-classed

有沒有辦法讓這項工作?我可以將QSettings文件的內容放在字典中,並忘記QSettings,但我希望能夠更簡單/更短的方式。

+0

我已經把文件的內容處理成字典了。事實證明,這並不像我想象的那麼糟糕。 –

回答

4

使用一個設置文件,併爲每個佈局創建單獨的組。

QSettings syntax支持分級密鑰,因此就使用beginGroupendGroup創建一個名爲佈局部分:

settings.beginGroup('layouts') 
settings.beginGroup('layoutname1') 
# set various layout values... 
settings.endGroup() 
settings.beginGroup('layoutname2') 
# set various layout values... 
settings.endGroup() 
settings.endGroup() 

這將輸出看起來像這樣的文件:

layouts/layoutname1/value1=true 
layouts/layoutname1/value2=true 
... 
layouts/layoutname2/value1=false 
layouts/layoutname2/value2=false 
... 

或者,你可以使用QSettings arrays創建索引列表的佈局。

+0

很好的答案!不幸的是,由於遺留代碼,這在我的情況下不起作用,但在正常情況下,這是完美的,所以我將其標記爲正確。 –

+0

想要增加一個'QSettings'方法的附加好處,而不是寫出你自己的pickle,它會選擇適當的特定於平臺的偏好位置和格式。例如,在OSX上,它將plist文件寫入首選用戶位置。 – jdi