0

私はまだ wxWidgets のサイザーに慣れていません。

他のパネル/ボックスのリストを含む大きなパネルが必要で、それぞれに一連のテキスト フィールドが含まれます

----------------------
| label    text box  |
| label2   text box2 |
----------------------
----------------------
| label    text box  |
| label2   text box2 |
----------------------
----------------------
| label    text box  |
| label2   text box2 |
----------------------

また、これらのボックスを (最後に) 追加したり、(どこでも) 削除したりできる必要があります。含まれているパネルに収まらないほど多くある場合は、垂直スクロール バーも必要です。

これは私がこれまでに試したことであり、含まれているパネルで作成された最初のボックスで機能しますが、追加の追加アイテムはメインパネルの左上にある小さなボックスにすぎません。サイザーコードは同じですすべてのボックス。

//itemsList is a container containg a list of *Item pointers to each box/panel/whatever the right name is
Items::Items(wxWindow *parent)
:wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
{
    //one sstarting item
    OnAdd(wxCommandEvent());
}

void Items::OnAdd(wxCommandEvent &event)
{
    unsigned id = itemsList .size();
    Item *item = new Item(this,id);
    itemsList .push_back(item);

    RebuildSizer();
}
void Items::RebuildSizer()
{
    this->SetSizer(0,true);
    wxBoxSizer *sizerV = new wxBoxSizer(wxVERTICAL);

    for(std::vector<Item*>::iterator it = itemsList .begin(); it != itemsList .end(); ++it)
        sizerV->Add(*it, 1, wxEXPAND | wxLEFT | wxRIGHT, 5);

    SetSizer(sizerV);
}
void Items::OnRemove      (wxCommandEvent &event, unsigned itemId)
{
    delete itemsList [itemId];
    itemsList .erase(items.begin()+itemId);
    for(std::vector<Item*>::iterator it = itemsList .begin()+itemId; it != itemsList .end(); ++it)
        (*it)->ChangeId(itemId++);

    RebuildSizer();
}

また、各ボックスの内容をレイアウトする最良の方法は何ですか? 2 x 2 のグリッドサイザーを使用することを考えていましたが、ラベルをできるだけ小さくしながら、テキスト ボックスをできるだけ広くする方法がわかりません (ただし、2 つのテキスト間の配置も維持します)。ボックス)?

4

3 に答える 3

1

「収容パネルに収まらないほど多すぎる場合は、垂直スクロールバーも必要です。」

wxScrolledWindowを見ることができます。

「追加されたアイテムは、メインパネルの左上にある小さなボックスです」

よくわかりませんが、wxSizer :: Layout()を呼び出すと役立つかもしれません。

「また、各ボックスの内容をレイアウトするための最良の方法は何ですか?」

このsizerdemoを見てください。ラベルをできるだけ小さくすることが必須ではない場合は、ラベルに固定幅を指定して、テキストボックスのみを拡大することができます。新しいボックスを追加または削除するときにサイズを調整する場合は、OnSize()イベントハンドラーを実装できます。

于 2008-11-06T17:18:55.197 に答える
0

wxForumもお勧めできますか。過去に wxWidgets の質問に非常に役立つことがわかりました。

具体的にはwxScrolledWindowのスクロールが役立ちます。wxScrolledWindow->SetSizer をトップ レベルのサイザー (コントロールを含むサイザー) で使用して、スクロール領域を設定します。wxWidgets に含まれる scroll、scrollsub、vscroll というサンプルも確認してください ( wxwidgets インストールの samples ディレクトリ)。

于 2008-11-06T19:44:33.700 に答える
0

この質問をwxWidgets メーリング リストの 1 つに投稿することをお勧めしますか? 彼らは非常に迅速にあなたを助けることができます.

于 2008-11-06T17:23:59.677 に答える