2016-04-06 20 views
-1

我正在使用wxCreatePersistentObject將標籤保存在內存中,但是我遇到了一些問題。使用wxCreatePersistentObject將標籤保存在內存中

使用http://docs.wxwidgets.org/trunk/overview_persistence.html#persistence_defining 我要一步一步來創建這個持久化類。我想保存從auiNotebook繼承的tabpanel。

class myPersistentClass : public wxPersistentObject{ 
public: 
    myPersistentClass(TabPanel *panel); 
    wxString GetKind() const; 
    wxString GetName() const; 
    void Save() const; 
    bool Restore(); 
    TabPanel * panel_; 
    wxPersistentObject * wxCreatePersistentObject (PropertyTabPanel *panel); 
}; 

這裏是我的定義:

myPersistentClass::myPersistentClass(TabPanel *panel):wxCreatePersistentObject(panel) { 
    } 

    wxPersistentObject * wxCreatePersistentObject (TabPanel *panel){ 
    return new myPersistentClass(panel); 
    } 

    wxString myPersistentClass::GetKind() const{ 
    return "PropertyTabPanel"; 
    } 

    wxString myPersistentClass::GetName() const{ 
    return "namesomething"; 
    } 

    void myPersistentClass::Save() const{ 
    wxPersistentObject::SaveValue("something", this); 
    } 

    bool myPersistentClass::Restore(){ 
    return wxPersistentObject::RestoreValue(GetName(), this); 
    } 

它給毫安構造一個編譯器錯誤。我不確定我做錯了什麼。此外,如果有人可以告訴我,如果我正在創建此wxPersistentObject的正確軌道

+0

正如我們多次向您解釋的:這是錯誤的方法。 – ravenspoint

+0

@ravenspoint我將採用不同的方法。知道如何使用這個wxpersistent類以供將來參考,它仍然會很好。我猜這是在wxwidgets中爲了某種目的而使用它的?我不知道爲什麼會有這樣的反對票。這完全是一個單獨的問題。 –

回答

0

真的不清楚你在這裏要做什麼。持久對象在持久性存儲中(例如,在磁盤上)被銷燬時將其狀態保存,並在再次創建時將其恢復。一個典型的例子是記錄程序運行之間的大小和位置的頂層窗口或記住其上次選定頁面的筆記本。所以如果你想用這種方式來保存你的TabPanel狀態,你可以定義PersistentTabPanel,但是除非TabPanel不是來自wxWindow,你應該直接從wxPersistentWindow<TabPanel>而不是wxPersistentObject本身繼承它。

至於ctor中的錯誤,在ctor初始值設定項列表中調用wxCreatePersistentObject()從C++的角度來看沒有任何意義,您可以使用初始化項列表來初始化基類和成員,而此函數是當然,也沒有。作爲您鏈接到狀態的文檔,您需要定義此功能取TabPanel*

+0

它不保存完整的對象只是它的一部分,如位置,大小等不控制等? –

+0

是的,它只保存選定的對象屬性,它完全不保存對象的完全序列化。 –