0

我目前正在使用一些现有的大型 C++ 代码开发一个工具。我目前正在考虑使用模型-视图-控制器 (MVC) 设计。该模型应包含所有 C++ 代码。视图是用户看到的,而控制器基本上是模型和视图之间的粘合剂。

我正在寻找的功能是:

  • 使用 MVC 的可扩展设计
  • 文本用户界面 (TUI)、终端和图形用户界面 (GUI) 选项
  • GUI 应该加载一些文本文件
  • GUI 应该使用用户的一些文本输入来运行一些算法并生成一些输出值
  • GUI 最终应该会弹出、保存、显示一些带有 GNU 绘图的图形。
  • C++ 代码在 Eclipse 中运行良好(库、包含、构建选项)
  • 及时将新算法添加到 C++ 代码中,这不应该成为一个大问题。

现在我找到了 3 个解决方案:

  • QT -> QT Creator 几乎要求使用 IDE,尽管有 QT 的优点,但从 Eclipse 转到它会很麻烦。QT 似乎也需要围绕 GUI 的奇怪结构,所以我对如何制作控制器感到困惑。eclipse插件目前已经死了,我在QT和诺基亚的FTP上都找不到。
  • GTKmm -> 来自 C,有时有点难以理解为什么需要一些东西。我相信我可以在 MVC 设计中完成这项工作。
  • Java Swing 使用共享库 (JNI) -> 使用 Java 和 C++,这有点奇怪。使用 JNI 可能需要对现有 C++ 代码进行一些额外的工作。

我对 Java Swing 有一些经验,而对 QT 和 GTKmm 几乎没有经验。

那么当我作为一个没有经验的 UI 开发人员已经拥有现有的 C++ 代码时,制作 GUI 的最佳解决方案是什么?

4

1 回答 1

3

在您的 3 个选项中,我肯定会选择 Qt。

基本上,要让 Qt 成为一个功能性 GUI,您需要启动某种小部件,然后启动应用程序的事件循环 ( QApplication) 。show()QApplication::exec()

http://qt-project.org/doc/qt-4.8/qapplication.html

http://qt-project.org/doc/qt-4.8/qapplication.html#exec

Qt 非常灵活且经过深思熟虑,并且拥有强大的追随者。它有令人难以置信的文档。

要与现有的 C++ 数据结构进行交互,只需将它们构造为成员变量,作为 GUI 的主要小部件之一。然后,当您想要访问并显示其上的信息时,它就是小菜一碟。

http://qt-project.org/doc/qt-4.8/qwidget.html

http://qt-project.org/doc/qt-4.8/qmainwindow.html

Qt 中的大多数 GUI 元素仅充当视图,并且没有任何明确的模型和控制器设置。那是留给开发商的。如果您正在显示数据库或树或项目网格,则存在模型/视图流,但我认为它不适用于您的应用程序。

理解和使用 SIGNALS 和 SLOTS 对于在 Qt 中制作交互式 GUI 至关重要,而且非常轻松。

http://qt-project.org/doc/qt-4.8/signalsandslots.html

http://qt-project.org/doc/qt-4.8/qobject.html#details

阅读所有不同类型的 QWidgets,您应该能够找到您在问题中列出的每个元素。

这里有一些你应该看的:

http://qt-project.org/doc/qt-4.8/qtextstream.html

http://qt-project.org/doc/qt-4.8/qtextedit.html

http://qt-project.org/doc/qt-4.8/qlineedit.html

http://qt-project.org/doc/qt-4.8/qlabel.html

当然,还要查看 Qt 附带的教程和示例。

如何在 Qt 中使用 GNUPlot

http://lists.trolltech.com/qt-interest/2002-12/thread00068-0.html

此外,作为同时使用 Qt Creator 和 Eclipse 的开发人员,我更喜欢 Qt Creator,并且将项目移植到 Qt Creator 中工作非常简单。如果您想更改 Eclipse 的构建链以使用 Qt 库和 QMake,也可以。

http://qt-project.org/doc/qt-4.8/qmake-project-files.html

http://qt-project.org/doc/qt-4.8/qmake-project-files.html#declaring-other-libraries

http://therning.org/magnus/archives/1023

我希望这会有所帮助。祝你好运。

于 2013-03-15T17:46:57.497 回答