wxNotebookPage中的wx *布局

时间:2012-05-13 09:12:50

标签: c++ wxwidgets wxnotebook

我正在尝试为计划应用程序编写前端程序。在我的主选项卡中应该有两个列表(一个在另一个列表之上)。但这似乎是不可能的(我昨天半天和今天再坐三个小时)。所以这是我的结果:

enter image description here

这是我的守则的共同部分:

    // LayoutManagement - Main
    sizer = new wxBoxSizer(wxVERTICAL);
    this->SetSizer(sizer);

    // Tabpane
    tab_pane = new wxNotebook(this,TAB_PANE);
    sizer->Add(tab_pane,1,wxEXPAND);

    // Overview tab
    wxBoxSizer *ot_sizer = new wxBoxSizer(wxVERTICAL);
    overview_tab = new wxNotebookPage(tab_pane,TAB_OVERVIEW);
    overview_tab->SetSizer(ot_sizer);
    tab_pane->AddPage(overview_tab,_("Countdown und Nachrichten"),true);

    // Schedule
    schedule_list = new wxListBox(overview_tab, SCHEDULE_LIST);
    ot_sizer->Add(schedule_list,1,wxEXPAND);

    // NewsList
    news_list = new wxListBox(overview_tab,NEWS_LIST);
    ot_sizer->Add(news_list,3,wxEXPAND);

我的标题(部分):

    wxListBox *schedule_list;
    wxBoxSizer *sizer;
    wxListBox *news_list;
    wxNotebook *tab_pane;
    wxNotebookPage *overview_tab, *settings_tab, *about_end_tab;

我做错了什么?

问候

迈克尔

(抱歉我的英语不好)

2 个答案:

答案 0 :(得分:0)

此代码无效的原因是您在将小部件添加到sizer之前调用了SetSizer()。您应该在将小部件添加到sizer后将调用移动到SetSizer,或者在添加后强制sizer重做布局。

ot_sizer->Add(news_list,3,wxEXPAND);

// all widgest added to sizer, now arrange layout as specified
ot_sizer->Layout();

这应该暂时修复您的代码。

对代码结构的最终评论:您似乎在一个大型代码部分中构建所有内容。这不是一个好主意。当您继续向GUI添加元素时,它将变得非常混乱。最好是为每个页面创建子类,并在该页面的构造函数中创建属于每个页面的小部件。

class cOverviewTab : public wxNotebookPage
{
public:
cOverviewTab() : wxNotebookPage(tab_pane,TAB_OVERVIEW)
{
  wxBoxSizer *ot_sizer = new wxBoxSizer(wxVERTICAL);
  ot_sizer->Add( new wxListBox(overview_tab, SCHEDULE_LIST) );
  ot_sizer->Add( new wxListBox(overview_tab,NEWS_LIST) );
  SetSizer( ot_sizer );
}
};

答案 1 :(得分:0)

我遇到了同样的问题,我花了大约2个小时来修复它。

没有理由更改代码中的其他行。您只需使用wxPanel类而不是wxNotebookPage来为wxNotebook对象创建新页面。这是因为wxNotebookPage只是typedef的{​​{1}}而wxWindow没有wxWindow所具有的必要功能。

你的其他代码不需要修改才能工作,除非上面提到的将页面子类化以避免GUI混乱是非常好的。