为现有的大型C ++代码构建图形用户界面

时间:2013-03-15 10:22:22

标签: c++ swing qt user-interface gtkmm

我目前正在使用一些现有的大型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设计中完成这项工作。
  • 使用共享库(JNI)的Java Swing - >使用Java和C ++,这有点奇怪。使用JNI可能会花费一些额外的工作来处理现有的C ++代码。

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

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

1 个答案:

答案 0 :(得分:1)

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

基本上,要使Qt成为一个功能GUI,您需要启动QApplicationshow()某种小部件,然后启动应用程序的事件循环(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元素仅作为视图,并且没有任何明确的模型和控制器设置。这留给了开发人员。如果您正在显示数据库或树或项目网格,则有model/view flow,但我认为它不适用于您的应用程序。

理解和使用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附带的教程和示例。

如何将GNUPlot与Qt一起使用

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

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