使用 wxCreatePersistentObject 将选项卡保存在内存中

Using wxCreatePersistentObject to save tabs in a memory

我正在使用 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);
  }

它给 ma 一个构造函数的编译器错误。我不确定我做错了什么。另外,如果有人可以告诉我我是否在正确的轨道上创建这个 wxPersistentObject

真的不清楚你想在这里做什么。持久对象在销毁时将其状态保存在持久存储中(例如在磁盘上),并在再次创建时恢复它。一个典型的例子是顶层 window 记住它在程序运行之间的大小和位置,或者笔记本记住它最后选择的页面。因此,如果您想以这种方式保存 TabPanel 状态,您可以定义 PersistentTabPanel,但除非 TabPanel 不是从 wxWindow 派生的,否则您应该从 wxPersistentWindow<TabPanel> 而不是直接 wxPersistentObject 本身。

至于ctor中的错误,在ctor初始化列表中调用wxCreatePersistentObject()从C++的角度来看没有任何意义,你使用初始化列表来初始化基类 和 members 和这个函数当然都不是。正如您 link 声明的文档,您需要 定义 此函数采用 TabPanel*.