【问题标题】:Starting wxWidgets C++ need a gentle nudge启动 wxWidgets C++ 需要轻推
【发布时间】:2011-01-07 13:13:48
【问题描述】:

所以我已经学习 C# 大约一年了(我今年 20 岁),而且我对它越来越有信心了。我也时不时地插手 C++。例如,最近我一直在关注 C++ 的 Nehe OpenGL tutorials,我发现这是一种有趣的学习方式。

在我偶然发现这个名为 FLTK 的库后,我想开始研究创建跨平台 GUI 软件。在终于痛苦地让它工作之后,我发现知道有用 C++ 创建 GUI 的解决方案令人耳目一新,但是我认为 FLTK 看起来很老。

所以我搜索了一些较新的 GUI 框架并决定开始使用wxWidgets(因为许可,决定反对Qt)。 我下载了它,编译了它,然后查看是否有任何用于RAD 开发的 IDE 插件,正如您可以想象的那样,将组件拖放到 C# 中的表单上,我希望有类似的东西。

我了解到code::blocks 有类似的东西,所以我试了一下。没关系,但让我失望的是可怕的代码完成;它只会显示当前对象中的成员和方法,而不会显示 #included 头文件。我知道代码完成/IntelliSense 对于 C++ 来说并不容易,但 Visual Studio 2008 处理得很好。我确实找到了一些其他 RAD 工具,例如 wxFormBuilder,但它需要花钱,而不是我想做的简单学习。

所以我的TLDR 问题是是否有人有使用wxWidgets 的经验?您是否只是在您喜欢的任何 IDE 中开发并编写 GUI 代码?意味着没有视觉助手?也许你可以给我一个提示,我应该往哪个方向走:)

谢谢,这也是我在这个网站上的第一篇文章,尽管在此之前我已经阅读了很多帖子,这些帖子帮助我解决了很多问题。干杯!

【问题讨论】:

  • Qt 是 LPGL - 你不喜欢那个许可证呢? IMO,Qt是比较全面和专业的框架。别算了。
  • 嗯,我认为 LPGL 不允许静态链接?我的代码必须是开源的?我试图阅读许可的内容,但它是一个巨大的 TLDR 哈哈,所以我认为免费的 wxWidgets 将是更合适的选择。也许不是?
  • LGPL 意味着您必须提供应用程序的目标文件以允许重新链接到较新的 QT dll... 或类似的东西 :) 这就是我使用 wxWidgets 的原因 - 没有麻烦!
  • LGPL 意味着您必须交付 Qt dll,您不能将 Qt 直接链接到您的可执行文件中。大多数情况下,您也会使用 wxWidgets 来执行此操作,因为静态链接也存在一些问题和烦恼。

标签: c# c++ wxwidgets


【解决方案1】:

我的建议是学习如何在代码中使用 wxWidgets 进行 GUI 布局,然后当你擅长它时再学习如何使用 GUI 工具。

手动做这种工作一段时间可以让你了解你需要什么(“好的,我需要一个垂直的 wxSizer,将这两个水平 wxSizer 放入其中,我将我的 wxStaticText 和 wxTextCtl 放在每个line ...")... 我认为如果您从 GUI 工具开始,您会很恼火,因为(上次我查看)它们都不是像您使用 .NET 获得的拖放编辑器.

【讨论】:

  • +1 用于在您的脑海中可视化它。我相信,如果您无法想象如何手动操作,那么无论如何您都无法在拖放编辑器中对其进行更正。
  • 我也是这样开始的,这对我对各种 UI 设计工具生成的代码的理解程度产生了巨大影响。
【解决方案2】:

一定再试一次Code::Blocks。这是一个使用 wxWidgets 的美妙环境。它带有一个表单设计器和 wxWidgets 项目的模板,所以我无法想象没有它的工作。

另外,对于 wxWidgets 的良好初学者介绍,请尝试this 页面。当我开始使用它时,它对我帮助很大。

【讨论】:

  • 您链接到的教程看起来不错 - 希望我早点知道。不过有趣的是,我在 MFC 方面的所有经历都是恶魔般的——我遇到的每一个问题都需要搜索网络某处专家提供的奇怪咒语。几乎我在 wxWidgets 上遇到的每一个问题,我都能用普通程序员的逻辑自己解决。简单的示例问题;更改静态文本的颜色。 MFC解决方案;拦截一大堆windows消息等wxWidgets解决方案;在控件上调用 .color() 方法。我的结论; MFC 只是表面上与 wx 相似。
  • MFC 太糟糕了!我永远不会使用它。即使我不得不这样做,我也会讨厌它。
  • 是的,我完全同意。因此,令人惊讶的是 wxWidgets 仅仅是某种可移植 MFC 框架的口头禅出现的频率如此之高。我的经验是,虽然表面上相似,但 MFC 是一个问题,而 wxWidgets 是一个解决方案。 (如果我为什么要对此喋喋不休感到困惑,那么您在答案中链接到的其他不错的教程会在 MFC 和 wxWidgets 之间的相似性上花费大量空间。
  • code::blocks 的一个痛点是,你需要坚持使用 gcc。
【解决方案3】:

我使用 wxWidgets 而不使用拖放设计器。这种方法显然有缺点,但优点是您无需处理任何可怕的自动生成代码。在过去,我发现在我的项目中间有这样的代码会导致各种类型的悲痛——尤其是如果你决定它需要一些严重的改变,通常需要从头开始,因为表单设计师在“写作”方面做得更好" 而不是 "编辑"。

对于简单的应用程序,您可以使用自定义小部件和标准小部件的组合来组装 UI,没有太大的困难。查看使用该方法的 wxWidgets 示例和演示。我的国际象棋应用程序(参见我的网站)也使用这种方法。

可以通过在更高抽象级别编写一些特殊的东西来实现更精细的 UI。我正在考虑的那种事情是一个子系统,它接受高级灵活的请求以提供不同类型的用户界面功能,然后整理要创建的控件的详细信息以及这些控件本身的定位等。这是我的一种技术幻想,但我从未真正尝试过。实际上,这种类型的相当原始的工具已经可用并被我提到的演示所使用。它被称为“Sizer”(wxSizer 类),基本上是一个控件容器。

最后我要指出的是,自从诺基亚收购了奇趣科技并使其“更加”免费(LGPL 许可证)以来,Qt 许可证的问题基本上已经消失。许多人认为 Qt 是这些天要走的路。我对 wxWidgets 很满意,但总有一天我会认真评估 Qyt。祝你的项目好运。

【讨论】:

  • 没错,在 c# 中,它通常决定随机将事物变为不可见,这很烦人,这些 Sizer 的东西听起来有点像反向对接。很酷,感谢您的意见
  • Sizer 在知道自己在做什么的人手中是一个很棒的工具。
【解决方案4】:

我已经使用 wxWidgets 开发了许多应用程序 GUI - 你可以在 http://ravenspoint.com/ 看到截图

恕我直言,您应该区分设计 GUI 和实现它。期望使用相同的程序来设计您的 GUI 并自动发出所有代码来实现设计,这是期望过高的。

设计程序应该快速而简单。我推荐http://www.balsamiq.com/

一旦您确定了设计,就可以转向编码。就个人而言,我发现使用 wxWidget 构造函数的 wxPosition 和 wxSize 参数将小部件放置在面板上是微不足道的 - 比尝试使用鼠标将小部件轻推到它们的确切位置更容易。

使用某种表单生成器来为重要的 GUI 生成所有代码的麻烦在于,您最终会遇到一堆自动生成的代码,很难在其中找到出路。如果代码是手写的,那么你已经知道所有东西的位置了。

【讨论】:

  • 我知道这不是解决方案,但我所做的是使用 RAD 设计表单,然后将代码复制并粘贴到编辑器中并“修复它”。然后我将它集成到应用程序的源代码中。
  • George - 如果它适合您,它就是一个解决方案。但是,“修复”步骤对我来说听起来很乏味。我想知道它是否会生成易于维护的代码,例如有意义的变量名和代码顺序?当然,您和我的方法的问题在于设计迭代。至少 balsamiq 的 GUI 模型不会假装发出代码,而且我不会面对编辑机器和人工生成代码的混合体——这都是我自己的工作,无论好坏。一段时间后,您将学会编写在客户要求更改时易于调整的 GUI 代码。
【解决方案5】:

wxFormBuilder 但要花钱

wxFormBuilder 是免费且开源的

Visual Studio 也最适合在 wxWidgets 中进行 C++ 编码,但是由于 Visual Studio 处理很多事情的方式,你会在 Linux 上遇到很多问题,比如你必须特别注意区分大小写的文件名。

另外关于 GUI,将 wxFormBuilder 添加到 Visual Studio 解决方案,将文件类型处理程序添加到 Visual Studio。现在只需双击它并添加对话框,就像在 C# 中一样。 只需将生成的代码文件添加到 Visual Studio 项目中一次即可完成。

在 wxWidgets 中使用 Visual Studio 和 GUI 编程非常容易。

如果您想在 Linux 上移植,也不要忘记观看 CodeLite 编辑器。它与 Visual Studio 项目和快捷键非常兼容。

【讨论】:

  • 啊! VC++ 中的 wxWidgets - 麻烦的秘诀。见stackoverflow.com/questions/1916782/…stackoverflow.com/questions/134029/…
  • 强烈反对,您需要一些经验才能开始,但是一旦您启动,使用 VS 编程非常快。我可以这么说是因为我很久以前就写了一个 wxVS2008Integration 集成工具(不再可用),与任何其他 IDE 相比,它非常易于使用 VS。
  • 使用过 VC++ 和 CodeBlocks,老实说 CodeBlocks 更好。它并不完美,但仍然更好。
  • VS 具有强大的插件,如 Visual Assist 和 wxVS2008Integration 等,在生产力方面是无与伦比的。 CodeBlocks 很棒,但它不支持那么多生产力选项,并且由于其开源性质而没有那么出色的插件。我个人推荐 CodeLite,在我看来它比 Linux 上的 CodeBlock 更好,但它仍然是新的并且正在大量开发中。
  • 我已经使用 VC++ 2008 Express 和 wxWidgets(使用 wxVC 和 wxFormBuilder [已安装 [wxPack]])并且它们一起工作得很好(在那之前尝试过 CodeBlocks 但是 - 对我来说 - 调试器集成很漂亮破旧)。还在 Linux 上使用了带有 wxWidgets 的 CodeBlocks(使用 wxFormBuilder)(但在一个较小的项目上,所以我设法解决了调试问题)。 wxpack.sourceforge.net
【解决方案6】:

有wxGlade和wxFormBuilder

不知道还有没有,但是我知道的wxFormBuilder是免费开源的。

您会在主页上找到指向其他工具的链接 wxGlade (http://wxglade.sourceforge.net/)。

这些程序中的大多数都能够输出 xrc 文件,这些文件是您的 GUI 的 XML 表示形式。它解决了生成代码的复杂性问题,但没有那么强大。

但就我个人而言,我不使用这些工具中的任何一个,除了有时在我使用之前查看它的外观,但从不实际生成代码。

【讨论】:

    【解决方案7】:

    我刚刚使用 netbeans IDE 在 wx 和 fltk 中完成了一个 hello world 程序。 Microsoft Visual Studio WinForms 或 MFC 比任何一个都容易得多。我需要跨平台能力,所以我不能将它用于这个应用程序。我完成 fltk 的时间比 wx 少得多。该程序更简单、更小、更快、更容易编写。 Wx 有相当脱节的文档和组织。 Fltk 是在“旧时代”设计的,当时重视小型快速和高效。这可能就是为什么它对您来说似乎“旧”。我是个老家伙,所以它对我有用。 YMMV

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 2013-11-09
      • 2011-06-03
      • 2012-03-16
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      相关资源
      最近更新 更多