我正在尝试为计划应用程序编写前端程序。在我的主选项卡中应该有两个列表(一个在另一个列表之上)。但这似乎是不可能的(我昨天半天和今天再坐三个小时)。所以这是我的结果:
这是我的守则的共同部分:
// 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;
我做错了什么?
问候
迈克尔
(抱歉我的英语不好)
答案 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混乱是非常好的。