User interface 如何使我的wx GUI与QT GUI相似

User interface 如何使我的wx GUI与QT GUI相似,user-interface,wxwidgets,User Interface,Wxwidgets,我使用wxFormbuilder来模拟QT GUI设计,但我始终无法成功地获得理想的结果 该问题与路线/布局有关。谁能帮我一把吗 因为我不能在这里附加文件,所以我将wxFormbuilder项目文件和qt gui screenspot.png文件上传到下面的链接 如果有人有时间,请给我一个向导 wxFrombuild项目文件和qt_gui.png文件在这里 你的设计相当复杂。我不使用wxFormbuilder,我喜欢通过“硬编码”布局手动设置表单 因此,在我解释我将如何做之前,这里有一些建议:

我使用wxFormbuilder来模拟QT GUI设计,但我始终无法成功地获得理想的结果

该问题与路线/布局有关。谁能帮我一把吗

因为我不能在这里附加文件,所以我将wxFormbuilder项目文件和qt gui screenspot.png文件上传到下面的链接

如果有人有时间,请给我一个向导


wxFrombuild项目文件和qt_gui.png文件在这里

你的设计相当复杂。我不使用wxFormbuilder,我喜欢通过“硬编码”布局手动设置表单

因此,在我解释我将如何做之前,这里有一些建议:

  • 我会将ok/cancel/help栏放在其他地方(在一个单独的wxPanel中,并将它们放在最后的对话框中)
  • 我会移动确定/取消/帮助栏上的测试连接按钮
  • 就设置布局而言,测试连接按钮目前处于一个糟糕的位置
  • (可选)我将在name/host/database和username/password之间拆分表单,因为它们表示可以在其他地方重用的子单元
现在,我将如何构建表单。我让您实现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);
}