1

我正在用 C(也在 C++ 中)实现一个程序来使用线程对文件进行排序,我需要在 C++ 或 C 中实现一个 GUI 来选择要排序的文件,而不通过输入标准指示路径(相当于 Java 中的 JFileChooser) . 你推荐什么教程?我正在阅读有关 Qt 的信息,但我对这个 IDE 不是很熟悉。如果你有任何例子会对我有很大帮助。

4

6 回答 6

9

使用 QT 非常简单:

 void openFile()
  {
    QFileDialog::getOpenFileName( this, tr("Open Document"), QDir::currentPath(), tr("Document files (*.doc *.rtf);;All files (*.*)"), 0, QFileDialog::DontUseNativeDialog );

    QString filename = QFileDialog::getOpenFileName( 
        this, 
        tr("Open Document"), 
        QDir::currentPath(), 
        tr("Document files (*.doc *.rtf);;All files (*.*)") );
    if( !filename.isNull() )
    {
      qDebug( filename.toAscii() );
    }
  }
于 2011-07-12T07:03:44.877 回答
3

您不必为此使用带有主循环的完整 gui。windows 和 unix 提供显示所需文件对话框的函数调用。在 Windows 上,您将调用 GetOpenFileName 或 GetSaveFileName。如果你需要一种跨平台的方式来做这件事,试试 sourceforge 上的小文件对话框。

于 2014-12-16T10:54:07.813 回答
0

你有两个选择:

  1. 如果你想使用 QT,你应该使用QFileDialog并将Options标志设置为 QFileDialog::ShowDirsOnly。

  2. 如果您只想为 Windows 编写代码,您可以使用属于 Win32 的FolderBrowserDialog类。

于 2011-07-12T06:59:35.680 回答
0

是的,您可以使用QT。您可以使用QT的QDir类来浏览文件夹和使用 QFile类来处理文件。

有关示例,请参见QT 文档。它有很多。

于 2011-07-12T07:02:40.470 回答
0

还有 QFileSystemModel,它可以映射到 QTreeView 项目,并会通过其内部实现做很多你需要的事情。它是多线程的,允许排序并具有许多其他不错的功能。在此处查找文档

于 2011-07-12T07:40:15.490 回答
-2

如果排序是您的程序唯一要做的事情,并且要在 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非常容易学习,它有一个基于流的布局引擎(有点像网页)。您可以使用 QT 完成大多数可以做的事情(这似乎是其他答案中最喜欢的),或者至少可以完成 99% 的应用程序所需的所有事情。由于 Shoes 是作为 GTK 上的层构建的,因此它与 GTK 一样可移植,并且您可以使用已经为您布置的大部分繁重工作来扩展它(即您不必直接处理 X 服务器、字体渲染或其他疲劳类似的东西)。


这篇文章的其余部分有点主题,但是由于有人因为我建议使用脚本语言而降级了我,我觉得我必须激励为什么用原始 C 或 C++ 编写 GUI 几乎总是一个坏主意(除非你这样做的唯一目的是学习如何做)。

使用原始 C 或 C++ 创建 GUI 适合喜欢钉钉子穿过身体的人,当您必须更改应用程序的外观或添加新功能时尤其痛苦。使用一些脚本语言,或者作为应用程序中的内置脚本语言 [tcl、lua、guile 和 pike 被设计为易于合并到您的应用程序中],或者围绕您创建的命令行工具创建一个 GUI 包装器。

还有很多 GUI 工具包(例如 GTK、QT)可以从某种 GUI 描述文件(如 XML 文件)加载 GUI:s。与编写和修改原始 C 或 C++ 相比,这些文件更容易编写和修改(或使用 GUI 构建器创建和修改)。

如果速度很重要并且作为最后的手段,请使用一些高级语言为您的 GUI 生成 C 或 C++ 代码,与编写原始代码相比,更改更灵活。但是如果你这样做,你仍然需要为第一个版本的 GUI 做大部分痛苦的工作,就像你用原始 C 或 C++ 编写它一样。TCL、M4 和 Ruby 等语言擅长这种元编程。另一个最后的手段是编写自己的 GUI 加载器,然后您可以使 GUI 描述文件的语法更加专业,这将使其比使用 GUI 工具包现成的 GUI 加载器更快(有时为 UI 小部件提供现成的 GUI loader 不支持),同样,这将使您更灵活地更改 GUI,然后用原始 C 或 C++ 对其进行编码。

PS。QT 使用预处理器来减轻 C++ 中 GUI 编程的痛苦,但它仍然非常低级,使用起来仍然没有必要的痛苦。

于 2011-07-12T09:01:00.420 回答