【问题标题】:wxWidgets Windows->MacOS or LinuxwxWidgets Windows->MacOS 或 Linux
【发布时间】:2018-04-24 01:05:46
【问题描述】:

我编写了一个 C++ 代码,它的 GUI 是用 wxWidgets 3.1 实现的,并且我在 Windows 上运行。作为一个跨平台的解决方案,我尝试在 MacOS 上编译项目。 我遇到了几个问题:

  • wxWindow::SetDoubleBuffered 似乎没有在 MacOS 上实现(在 Linux 上也是如此吗?)。我可以绕过并关闭双缓冲,但代价是为 Mac 用户绘制的绘图中出现一些闪烁。这并不理想:Mac / Linux 是否有类似的东西?
  • 构造函数 wxBitmap(const wxImage &image, const wxDC &dc) 在 MacOS 上似乎也不存在。我使用它能够在从 C 样式的 RGB 三元组数组创建的 wxImage 上使用“dc.DrawBitmap”(与 dc.SetUserScale 结合)。 Mac 用户如何使用 wxWidgets 在屏幕上显示像素数组?
  • 显然 MacOS 上没有 wxString 到 std::string 的转换(no viable conversion from 'wxString' to 'std::string' 错误)。它甚至是特定于操作系统的吗?
  • (次要细节):error: use of undeclared identifier 'sample_xpm' : SetIcon(wxICON(sample)); 似乎 sample_xpm 是 Windows 上可用的默认图标,而不是 MacOS....(?)。

感谢您的帮助!

【问题讨论】:

  • 你是如何在 OSX 上构建库的? IE。你通过了哪些配置选项?您在哪个 OSX 版本上试用该程序?您是否尝试查看 OSX 的绘图示例中是否仍然存在问题?关于转换 - 你看到wiki.wxwidgets.org/Converting_everything_to_and_from_wxString了吗?图标 - 您是否尝试在软件上使用示例图标?

标签: c++ cross-platform wxwidgets


【解决方案1】:

最好分别提出单独的问题,因为如果我们尝试一起讨论所有问题,事情可能会变得混乱,但这里是基本答案:

  1. wxWindow::SetDoubleBuffered() 没有在 wxOSX 中提供,因为所有的窗口都是双缓冲的。为了可移植性,仍然应该提供它的存根,但它仍然什么都不做,不调用它不应该导致任何闪烁。
  2. 带有此签名的 wxBitmap ctor 不是故意记录的,它对非 MSW 平台没有任何意义。只需使用不带 dc 参数的 ctor。
  3. 从 wxString 到 std::string 的转换不是特定于操作系统的,而是取决于您的构建选项:仅当您在 setup.h 中设置 wxUSE_STL=1(或 --enable-stl 配置选项)进行构建时才会隐式提供。为避免依赖于此,您始终可以显式使用ToStdString()。或者确保您在所有平台下使用相同的选项进行构建。
  4. 这个错误可能是在您自己的代码中,并且一定是由于没有包含 XPM 文件。这没有任何特定于平台的内容,实际上您通常需要 MSW 下的 XPM,所以我不确定您在那里做了什么 - 但只需看看您如何以及在哪里包含它。

【讨论】:

  • 谢谢大家!对于 sample.xpm,它是目录 wxWidgets-3.1.0\samples 中的一个文件;在 Windows 上(使用 Visual Studio)我没有包含这个目录,但它还是找到了这个图标。可能 MacOS 上安装的 wxWidgets 不包含示例或找不到目录。这个错误并不重要,我只是想知道。再次感谢!
猜你喜欢
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 2018-12-06
  • 2020-09-09
  • 2017-05-24
  • 2010-10-09
相关资源
最近更新 更多