【发布时间】:2021-04-26 18:23:23
【问题描述】:
我对 C++ 和 Wx 都比较陌生,所以在过去的几个小时里,我一直在努力尝试让它工作,但我似乎在这个问题上碰到了一堵比喻性的砖墙.
此代码编译时没有错误,但在运行时,它什么也不做。 它会一直运行直到终止(例如使用 Ctrl-C),但永远不会打开一个窗口。
这里是 C++ 源代码:
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include <wx/xrc/xmlres.h>
class MyApp : public wxApp {
public:
virtual bool OnInit();
};
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit() {
wxXmlResource::Get()->InitAllHandlers();
wxXmlResource::Get()->Load("res.xrc");
wxFrame MainFrame;
wxXmlResource::Get()->LoadFrame(&MainFrame, NULL, "MainFrame");
MainFrame.Show(true);
return true;
}
这里是附带的 XML 文件 res.xrc,它应该只在面板中生成一个包含 sizer 的空框架:
<?xml version="1.0" ?>
<resource>
<object class="wxFrame" name="MainFrame" title="Test">
<object class="wxPanel" name="TopLevelPanel">
<object class="wxBoxSizer" name="TopLevelSizer">
<orient>wxVERTICAL</orient>
</object>
</object>
</object>
</resource>
在 XML 中引入错误 - 例如,添加一些无效 XML 的虚假字符 - 确实会导致窗口打开, 它看起来像这样 (在 Linux 下):
如何修改我的代码以使窗口正确打开?
【问题讨论】:
-
什么wx版本?资源文件相对于可执行文件位于何处?你能在那里做
cd wxWidgets/buuildGTK/dsmples/xrc && ls -la吗? (如果您自己构建 wx)。如果没有 - 您可以安装示例并构建 xrc 示例并运行它吗? -
@Igor Wx 3.1.5,通过分发包安装。资源文件与可执行文件位于同一目录中。我不知道如何构建样本,甚至不知道从哪里获取它们。我对此很陌生。
-
我想你是最新的 Ubuntu 吗?并在 Eclipse 下工作?您可以尝试调试并查看发生了什么 - 文件是否实际加载,然后是否实际找到 XDML 中的框架?
-
另外,我刚刚意识到 - wxWidgets 使用指针操作。尝试使用以下代码:
wxFrame *mainFrame = nullptr; wxXmlResource::Get()->LoadFrame( MainFrame, NULL, "MainFrame" ); MainFrame->Show( true );