Я все еще привыкаю к настройщикам в 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 на 2, но я не уверен, как сделать так, чтобы текстовые поля расширялись как можно шире, при этом метки оставались как можно меньше (но также сохранялось выравнивание между текстом 2). коробки)?