Я изучаю wxWidgets на прошлой неделе, как с помощью IDE, так и с написанием кода на C++. Я начинаю отчаиваться, когда-либо получаю то, что выглядит хорошо, поскольку способность позиционировать позиции кажется очень ограниченной.Возможно ли это с помощью wxWidgets?
Я портирую крупно-иш-проект от C++ Builder до VStudio по соображениям затрат. У меня появилось довольно много диалогов для воссоздания. Обычно они содержат различные комбинации «блоков» ввода - из-за отсутствия лучшего слова. Я выбрал wxWidgets для моего графического интерфейса, потому что я думал, что смогу создать диалоги в коде из функций, которые создают строку формы. Например, в диалоговом окне, показанном ниже, у меня могут быть функции CreateLabelEdit, CreateLabelCombo, CreateBoldLabel и т. Д. На самом деле у меня есть некоторый успех в этой части, но у меня нет проблем с дизайном диалога.
Вот некоторые из проектных критериев из этой конкретной формы:
Все входы оставлены выровнены и разной ширины, соответствующих их содержанию.
Вводные метки выравниваются вправо.
Точка выравнивания (т.е.. Ширина столбца, содержащий входные метки одинакова во всех диалогах, и ширина различных входов, а также. Конечно, есть исключения!
Другого типы меток выравниваются в другом месте. BoldLabels в этом случае.
в основном я хочу, чтобы контролировать размер, расположение и выравнивание моих объектов. ли это случай иметь неправильное мышление для инструмента Я выбрал? Или такие вещи могут быть с помощью этого инструмента?
ЧАСТИЧНОЕ РЕШЕНИЕ Я попытался использовать абсолютные позиции, смешанные с дробилок и что не работает.
Затем я попытался использовать flexgrid sizer, чтобы сделать часть примера. Если я могу сделать один из блоков, я могу сшить несколько блоков. Это все хорошо, за исключением того, когда я установить ширину первого столбца с использованием SetItemMinSize, как это было предложено @VZ, что элемент теряет это sizerflag настройки:
form4::form4() :wxDialog(nullptr, wxID_ANY, "title")
{
wxSizerFlags flagT1(1);
flagT1.Align(wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT).Border(wxTOP | wxLEFT, 10);
wxSizerFlags flagT2(1);
flagT2.Align(wxALIGN_CENTER_VERTICAL).Border(wxTOP | wxLEFT, 10);
wxSizerFlags flagT3(1);
flagT3.Align(wxALIGN_CENTER_VERTICAL).Border(wxTOP | wxLEFT| wxRIGHT, 10);
wxBoxSizer* bSize = new wxBoxSizer(wxVERTICAL);
wxStaticText* _Text = new wxStaticText(this, wxID_ANY, "this should be bold");
wxFont _Font = _Text->GetFont();
_Font.MakeBold();
_Font.SetPixelSize(_Font.GetPixelSize()*1.1);
_Text->SetFont(_Font);
bSize->Add(_Text, wxSizerFlags().Border(wxTOP, 10).Center());
bSize->Add(new wxStaticText(this, wxID_ANY, "this should be bold"),
wxSizerFlags().Border(wxTOP, 10).Center());
wxFlexGridSizer* bSizer = new wxFlexGridSizer(3,0,0);
_Text = new wxStaticText(this, wxID_ANY, "bob");
// bSizer->SetItemMinSize(_Text, wxSize(150, -1)); //this has no effect here
bSizer->Add(_Text, flagT1);
bSizer->SetItemMinSize(_Text, wxSize(150, -1));// loses styling of flagT1
bSizer->Add(new wxTextCtrl(this, wxID_ANY, "default_value", wxDefaultPosition, wxSize(150, -1)), flagT2);
bSizer->Add(new wxStaticText(this, wxID_ANY, "cm", wxPoint(200, 20)), flagT3);
bSizer->Add(new wxStaticText(this, wxID_ANY, " longer"), flagT1);
bSizer->Add(new wxTextCtrl(this, wxID_ANY, "default_value2", wxPoint(-1, -1), wxSize(150, -1)), flagT2);
bSizer->Add(new wxStaticText(this, wxID_ANY, "cm", wxPoint(200, 20)), flagT3);
bSizer->Add(new wxStaticText(this, wxID_ANY, "bob"), flagT1);
bSizer->Add(new wxTextCtrl(this, wxID_ANY, "default_value3", wxPoint(-1, -1), wxSize(150, -1)), flagT2);
bSizer->Add(new wxStaticText(this, wxID_ANY, "cm", wxPoint(200, 20)), flagT3);
bSize->Add(bSizer);
bSize->Add(CreateStdDialogButtonSizer(wxOK | wxCANCEL), wxSizerFlags(0).Border(wxALL, 10));
this->SetSizerAndFit(bSize);
// this->Layout();
this->Centre(wxBOTH);
}
производит это:
Выполняете ли вы абсолютное позиционирование или используете разделитель для макета? – smcd
Попробуйте wxFormBuilder – macroland
@smcd. Я пытаюсь использовать sizers, как это рекомендует вся документация, но теперь я думаю, что предоставление размеров для x-компонентов и разрешение sizer обрабатывать y-компонент может быть решением. – marcp