【发布时间】:2023-02-26 05:04:24
【问题描述】:
我正在尝试使用 wxWidgets(我是新手),我正在尝试制作一个带有笔记本和标签的窗口,然后在笔记本内部,我想要一个拆分器,以便我可以在上面显示一棵树左边,右边是另一个笔记本,里面会有更多的标签。但它引起了问题。到目前为止,我已经扩展了一个 wxFrame,下面是它的内容:
wxPanel* parent = new wxPanel(this, wxID_ANY);
wxBoxSizer* vbox = new wxBoxSizer(wxVERTICAL);
wxNotebook* notebook = new wxNotebook(parent, wxID_ANY, wxDefaultPosition, this->GetSize());
wxPanel* notebookWindow = new wxPanel(notebook, wxID_ANY);
parent->SetSizer(vbox);
Center();
Maximize(true);
notebook->SetSize(this->GetSize());
notebook->AddPage(notebookWindow, wxT("Tab one"), true, 0);
notebook->AddPage(notebookWindow, wxT("Tab two"), true, 0);
wxSplitterWindow* splitterWindow = new wxSplitterWindow(notebookWindow, wxID_ANY);
wxTreeCtrl* tree = new wxTreeCtrl(splitterWindow, wxID_ANY, wxPoint(0, 0), wxSize(200, 1000), wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT | wxTR_HIDE_ROOT | wxTR_EDIT_LABELS);
wxTreeItemId rootID = tree->AddRoot(wxT("Root"));
wxTreeItemId item1ID = tree->AppendItem(rootID, wxT("Item 1"));
wxTreeItemId item2ID = tree->AppendItem(rootID, wxT("Item 2"));
wxTreeItemId item3ID = tree->AppendItem(rootID, wxT("Item 3"));
wxTreeItemId item4ID = tree->AppendItem(item2ID, wxT("Item 4"));
vbox->Add(splitterWindow, 1, wxALL | wxEXPAND, 5);
当我运行它时,我在最后一行收到一条错误消息:
“CheckExpectedParentIs(w, m_containingWindow)”在 wxSizer::DoInsert() 中失败:由与给定窗口关联的 sizer 管理的窗口必须将此窗口作为父窗口,否则它们将无法正确重新定位。
但随后它显示正确。但我仍然想摆脱这个错误。我认为这是在说,如果我将 splitterWindow 添加到 vbox,那么 vbox 应该设置为 splitterWindow 的父级 sizer,即 notebookWindow,这样我就可以更改行“parent->SetSizer(vbox);” “到“notebookWindow->SetSizer(vbox);”,但是当我尝试这样做时,即使错误消失了,树也消失了!
还:
-
我搞砸了分离器,试图让它正确显示东西,包括在主笔记本中右侧带有标签的额外笔记本,但我也没有运气。
-
我还需要能够使用鼠标来拖动和移动拆分器位置,但这似乎也没有发生。
-
我需要树和嵌套的笔记本在拆分器移动时相应地移动和调整大小。
-
而且我还注意到,当我单击选项卡时,它会更改选择的选项卡,但除此之外,没有任何反应。我需要能够在主笔记本的不同选项卡上显示不同的树,这样当我点击不同的选项卡时视图就会改变,嵌套笔记本也必须能够在不同的选项卡上显示不同的内容(否则有什么意义根本不使用标签?)。
我已经搜索了这方面的教程,但我发现的只是像https://zetcode.com/gui/wxwidgets 这样的东西,它似乎并没有真正解决这些问题。有人可以帮帮我吗?
【问题讨论】:
-
当您开始使用 wxWidgets 和 sizer 时,很难手动编写所有代码。获取一些 RAD 工具——wxGlade、wxFormBuilder、wxCrafter 等,并在那里设计你的 GUI。然后查看生成的代码并尝试了解不同之处。 (我推荐 wxGlade - 它得到维护并且可以根据当前的 wxWidgets 版本生成代码 - 我不是维护者,只是一个快乐的用户)。
-
我正在尝试使用 wxGlade,但安装说明有点含糊,因为它说“将存档解压缩到已知位置并可能将其添加到路径中。”但它没有指定它在谈论什么路径或如何添加它。它还说“在 Windows 上,应该安装 win32 扩展”,但我也不知道。它说“使用在你的平台上启动 python 应用程序所需的任何东西”,但我不确定我是否有任何解释器或我需要的任何东西。我使用 C++。我会试试这个,但我不知道我是否能成功。你能修复我的代码吗?
-
我已经检查了你的所有三个建议,它们的安装说明非常复杂或模糊不清,或者它们需要一些完全不同的 IDE(我使用的是 Visual Studio .NET),但是没有一个我可以下载一个安装程序文件,运行它来安装程序,然后运行它来生成我的代码?
标签: c++ user-interface wxwidgets