1

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

在此处输入图像描述

这是我的代码的共同部分:

    // 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;

我做错了什么?

问候

迈克尔

(对不起,我的英语不好)

4

2 回答 2

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 );
}
};
于 2012-05-13T12:58:02.023 回答
0

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

没有理由更改代码中的其他行。您只需使用wxPanel类而不是wxNotebookPage为对象创建新页面wxNotebook。这是因为wxNotebookPage它只是一个typedefwxWindowwxWindow没有一些必要的功能wxPanel

您的其他代码不需要修改即可工作,除了如上所述将您的页面子类化以避免 GUI 混乱会非常好。

于 2012-08-28T21:15:09.000 回答