我正在尝试为日程安排应用程序编写前端程序。在我的主选项卡中应该有两个列表(一个在另一个之上)。但这似乎是不可能的(我昨天坐了半天,今天又坐了三个小时)。所以这是我的结果:
这是我的代码的公共(public)部分:
// 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;
我做错了什么?
问候
迈克尔
(抱歉我的英语不好)
最佳答案
此代码不起作用的原因是您在将小部件添加到 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 );
}
};
关于c++ - wxNotebookPage 中的 wx* 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10570575/