1

スケジュール アプリケーションのフロントエンドをプログラムしようとしています。私のメインタブには2つのリストがあります(1つはもう1つ上にあります)。しかし、これは不可能のようです (昨日は半日、今日はさらに 3 時間座っていました)。だからこれは私の結果です:

ここに画像の説明を入力

そして、これは私のコードの共通部分です:

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

私は同じ問題を抱えていて、それを修正するのに約2時間かかりました.

コード内の他の行を変更する理由はありません。オブジェクトの新しいページを作成するwxPanel代わりに、クラスを使用するだけです。これは、が単なる であり、が持つ必要な機能がいくつかないためです。wxNotebookPagewxNotebookwxNotebookPagetypedefwxWindowwxWindowwxPanel

これが機能するために他のコードを変更する必要はありませんが、上記のように、GUI の混乱を避けるためにページをサブクラス化することは非常に良いことです。

于 2012-08-28T21:15:09.000 に答える
0

このコードが機能しない理由は、ウィジェットをサイザーに追加する前に SetSizer() を呼び出したためです。ウィジェットをサイザーに追加した後に SetSizer への呼び出しを移動するか、追加後にレイアウトを再実行するようにサイザーに強制する必要があります。

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

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

これにより、当面はコードが修正されるはずです。

コードの構造に関する最後のコメント: 1 つの大きなコード セクションですべてを構築しているようです。これは良い考えではありません。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 に答える