我使用wxFormbuilder来模仿QT GUI设计,但我总是无法成功地制作出理想的结果。
问题与对齐/布局有关。任何人都可以帮我一把吗?
因为我无法在这里附加文件,所以我将wxFormbuilder项目文件和qt-gui screenspot .png文件上传到下面的链接。
如果有人有时间,请给我一个指南。
wxFrombuild项目文件和qt_gui .png文件在这里。 http://www.2shared.com/file/62BJYq2l/help_dlg.html http://www.2shared.com/photo/uWl3XmRl/qt_GUI.html
答案 0 :(得分:0)
你的设计相当复杂。我不使用wxFormbuilder,我喜欢手动设置我的表单,通过“硬编码”布局。
所以在我解释如何做之前,这里有一些建议:
现在我将如何构建表单。我让你实现getValue和setValue。
此外,您还需要为工具栏执行类似操作(使用wxBoxSizer
)并将它们放在一起(再次使用wxBoxSizer
)。
此外,如果您可能想要使用wxStaticBox
class ConnectionEditor
: wxPanel
{
public:
ConnectionEditor(wxWindow* parent);
//
void getValue(ConnectionSettings&);
void setValue(ConnectionSettings const&);
private:
wxTextCtrl* name_;
wxTextCtrl* host_;
wxTextCtrl* database_;
wxTextCtrl* username_;
wxTextCtrl* password_;
wxCheckBox* save_password_;
};
wxTextCtrl* CreateTextControl(wxWindow* parent)
{
return new wxTextCtrl(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(100, 20));
}
wxTextCtrl* CreateStaticText(wxWindow* parent, std::string const& text)
{
return new wxStaticText(parent, wxID_ANY, text.c_str());
}
ConnectionEditor::ConnectionEditor(wxWindow* parent)
: wxPanel(parent, wxID_ANY)
{
this->name_ = CreateTextControl(this);
this->host_ = CreateTextControl(this);
this->database_ = CreateTextControl(this);
this->username_ = CreateTextControl(this);
this->password_ = CreateTextControl(this);
this->save_password_ = new wxCheckBox(this, wxID_ANY, "on");
//
wxFlexGridSizer* sizer = new wxFlexGridSizer(6, 2, 5, ,5); // 6 rows, 2 cols, 5 spacing in between
//
sizer->Add(CreateStaticText(this, "Name"));
sizer->Add(this->name_);
sizer->Add(CreateStaticText(this, "Host"));
sizer->Add(this->host_);
sizer->Add(CreateStaticText(this, "Database"));
sizer->Add(this->database_);
sizer->Add(CreateStaticText(this, "Username"));
sizer->Add(this->username_);
sizer->Add(CreateStaticText(this, "Password"));
sizer->Add(this->password_);
sizer->Add(CreateStaticText(this, "Save Password"));
sizer->Add(this->save_password_);
//
this->SetSizerAndFit(sizer);
}