【问题标题】:WxWidgets - Unable to load imagesWxWidgets - 无法加载图像
【发布时间】:2013-06-09 23:55:18
【问题描述】:

我最近开始使用 WxWidgets (2.9.4) 并且正在学习我找到的教程,但似乎我无法加载任何图像。我已经正确使用了处理程序(对于 PNG),问题发生在运行时。下面是尝试运行程序时显示的弹出窗口的图像。

代码如下:

wxPNGHandler *handler = new wxPNGHandler;
wxImage::AddHandler(handler);

wxBitmap exit;

exit.LoadFile(wxT("exit.png"), wxBITMAP_TYPE_PNG);

wxToolBar *toolbar = CreateToolBar();
toolbar->AddTool(wxID_EXIT, exit, wxT("Exit"));
toolbar->Realize();

Connect(wxID_EXIT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(mainWindow::exitProg));

感谢任何帮助。

编辑:我忘了提到当我点击取消时,会发生这种情况:

我将exit.png文件放在构建目录(/Debug或/Release)以及源代码目录中,但还没有看到。

【问题讨论】:

  • 这听起来像是引用图像的路径问题 - 第一个错误表明格式无效,这很容易通过找不到文件来解释。
  • 请注意,您可以在任何 Windows 原生消息框(包括 wxWidgets 显示的断言框)中按 Ctrl+C 将其文本复制到剪贴板。无需为您制作屏幕截图 - 文本对其他人来说更具可读性。
  • @VZ。好吧,我不知道。感谢您的提示。

标签: c++ wxwidgets


【解决方案1】:

首先,为避免wxToolBar 内部出现问题,请始终检查LoadFile() 的返回码,或者使用wxBitmap::IsOk() 来检查位图是否已成功加载。

其次,虽然像您一样显式添加处理程序非常好,但我建议您只调用wxInitAllImageHandlers(),因为它更简单并且没有真正的缺点,除非您希望创建尽可能小的程序。

最后,为了解决您的实际问题,该文件显然不存在于您从中加载它的路径中。当然,您可以通过注意不要直接更改程序中的工作(或在更改后恢复)并将文件放在正确的位置来解决此问题。但是,正如您所发现的,这很容易出错,因此更好的主意是始终使用资源的完整路径。要构造它们,您会发现 wxStandardPaths 很有用,尤其是它的 GetResourcesDir() 方法。

【讨论】:

    【解决方案2】:

    你的工作目录是什么?

    如果您正在使用 Visual Studio 并使用界面(F5 或 ctrl-F5 或工具栏中的小运行按钮)运行,那么您的工作目录就是包含项目文件的文件夹。所以尝试在那里复制你的图像文件。

    或者打开一个命令窗口,cd 到您的构建目录之一,然后从命令行运行您的应用程序。

    一般来说,为了避免此类问题,我会更改项目属性,以便可执行文件不存储在构建文件夹之一中,而是存储在一个新文件夹中(我通常称之为“bin”——我的 unix 根目录是显示!)并更改调试属性,使工作目录为 bin 文件夹。

    这种技术有几个优点:

    • 发行版和调试版都使用同一个文件夹,因此您只需要一份任何额外文件的副本,例如您的图像文件。
    • 很容易在工作目录中查看可执行文件和额外文件,而不会被构建文件夹中的所有 .obj 文件分心

    恕我直言,在维护非默认项目属性方面多花点小麻烦是值得的。

    【讨论】:

    • 非常感谢!不知道VS跑在项目目录下,我以为是跑在build目录下(/Debug、/Release等)。现在完美运行!
    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2018-02-01
    • 2019-05-25
    • 2014-10-29
    • 2015-08-18
    • 2016-11-17
    • 2023-03-09
    相关资源
    最近更新 更多