wxWidgets Windows->MacOS 或 Linux
wxWidgets Windows->MacOS or Linux
我编写了一个 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'
错误)。它是如何 OS 具体的?
- (次要细节):
error: use of undeclared identifier 'sample_xpm' : SetIcon(wxICON(sample));
似乎 sample_xpm 是 Windows 上可用的默认图标,而不是 MacOS... .(?).
感谢您的帮助!
最好单独提出问题,因为如果我们尝试将所有问题放在一起讨论,事情可能会变得混乱,但这里是基本答案:
wxWindow::SetDoubleBuffered()
没有在 wxOSX 中提供,因为所有 windows 都在那里双缓冲。为了可移植性,仍然可以说应该提供它的存根,但它仍然什么都不做,不调用它不应该导致任何闪烁。
- 带有此签名的 wxBitmap ctor 没有被有意记录下来,它对非 MSW 平台没有意义。只需使用不带
dc
参数的 ctor。
- 从 wxString 到
std::string
的转换不是 OS 特定的,而是取决于您的构建选项:仅当您在 [=30] 中设置了 wxUSE_STL=1
时才会隐式提供=](或 --enable-stl
配置选项)。为避免依赖于此,您始终可以明确使用 ToStdString()
。或者确保您在所有平台下使用相同的选项构建。
- 这个错误大概是在您自己的代码中,并且一定是由于没有包含 XPM 文件。这与平台无关,实际上你通常 not 需要 MSW 下的 XPM,所以我不确定你在那里做了什么 - 但只要看看你如何以及在哪里包括它。
我编写了一个 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'
错误)。它是如何 OS 具体的? - (次要细节):
error: use of undeclared identifier 'sample_xpm' : SetIcon(wxICON(sample));
似乎 sample_xpm 是 Windows 上可用的默认图标,而不是 MacOS... .(?).
感谢您的帮助!
最好单独提出问题,因为如果我们尝试将所有问题放在一起讨论,事情可能会变得混乱,但这里是基本答案:
wxWindow::SetDoubleBuffered()
没有在 wxOSX 中提供,因为所有 windows 都在那里双缓冲。为了可移植性,仍然可以说应该提供它的存根,但它仍然什么都不做,不调用它不应该导致任何闪烁。- 带有此签名的 wxBitmap ctor 没有被有意记录下来,它对非 MSW 平台没有意义。只需使用不带
dc
参数的 ctor。 - 从 wxString 到
std::string
的转换不是 OS 特定的,而是取决于您的构建选项:仅当您在 [=30] 中设置了wxUSE_STL=1
时才会隐式提供=](或--enable-stl
配置选项)。为避免依赖于此,您始终可以明确使用ToStdString()
。或者确保您在所有平台下使用相同的选项构建。 - 这个错误大概是在您自己的代码中,并且一定是由于没有包含 XPM 文件。这与平台无关,实际上你通常 not 需要 MSW 下的 XPM,所以我不确定你在那里做了什么 - 但只要看看你如何以及在哪里包括它。