如果排序是您的程序唯一要做的事情,并且如果它要在 unix-y 环境中使用,那么我建议将该程序制作为命令行工具并以某种脚本语言创建一个 GUI 包装器来调用该程序。它将更简单且更有用(您只需花费半个工具的价格即可获得两个工具),它还将更容易移植到其他 GUI 环境以及更易于分发。
这个 shellscript 会打开一个文件选择器对话框并运行你的程序(创造性地命名为 yoursort)(未经测试和我不习惯编写 shell 脚本,我更喜欢其他脚本语言,我确保其他 stackoverflow 贡献者可以找到很多需要改进的地方):
#!/bin/sh
FILE=`zenity --file-selection --title="Choose file to sort"`
if [ $? -eq 0 ]; then
yoursort -f "$FILE"
fi
Zenity 是一个用于创建简单 GUI 对话框的命令行工具,它还包括一个进度对话框。
如果您想创建更高级的 GUI,请使用 tcl、Python 或 Ruby 等脚本语言。
Ruby GUI 工具包Shoes 非常容易学习,它有一个flow based layout engine(有点像网页)。您可以使用 QT 完成大多数可以做的事情(这似乎是其他答案中最喜欢的),或者至少可以完成 99% 的应用程序所需的所有事情。由于 Shoes 是作为 GTK 上的层构建的,因此它与 GTK 一样可移植,并且您可以使用已经为您布置的大部分繁重工作来扩展它(即您不必直接处理 X 服务器、字体渲染或其他疲劳之类的东西)。
这篇文章的其余部分有点主题,但由于有人因为我建议使用脚本语言而降级了我,我觉得我必须激励我为什么要编写 GUI
使用原始 C 或 C++ 几乎总是一个坏主意(除非您这样做的唯一目的是学习如何做)。
使用原始 C 或 C++ 创建 GUI 适合喜欢钉钉子穿过身体的人,当您必须更改应用程序的外观或添加新功能时尤其痛苦。使用一些脚本语言,或者作为应用程序中的内置脚本语言 [tcl、lua、guile 和 pike 被设计为易于合并到您的应用程序中],或者围绕您创建的命令行工具创建一个 GUI 包装器。
还有很多 GUI 工具包(例如 GTK、QT)可以从某种 GUI 描述文件(如 XML 文件)加载 GUI。与编写和修改原始 C 或 C++ 相比,这些文件更容易编写和修改(或使用 GUI 构建器创建和修改)。
如果速度很重要并且作为最后的手段,请使用一些高级语言为您的 GUI 生成 C 或 C++ 代码,与编写原始代码相比,更改更灵活。但是如果你这样做,你仍然需要为第一个版本的 GUI 做大部分痛苦的工作,就像你用原始 C 或 C++ 编写它一样。 TCL、M4 和 Ruby 等语言擅长这种元编程。另一个不得已是编写自己的 GUI 加载器,然后您可以使 GUI 描述文件的语法更加专业,这将使其比使用 GUI 工具包现成的 GUI 加载器更快(并且有时会提供现成的 GUI 加载器不支持的 UI 小部件),同样,这将使您更灵活地更改您的 GUI,然后用原始 C 或 C++ 对其进行编码。
PS。 QT 使用预处理器来缓解 C++ 中 GUI 编程的痛苦,但它仍然非常低级,使用起来仍然没有必要的痛苦。