如何在C ++或C中浏览文件夹?

时间:2011-07-12 06:57:56

标签: c++ c qt file-browser

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

6 个答案:

答案 0 :(得分: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() );
    }
  }

答案 1 :(得分:3)

你不必使用带有主循环的完整gui。 windows和unix提供显示所需文件对话框的函数调用。在Windows上,您可以调用GetOpenFileName或GetSaveFileName。如果您需要跨平台方法,请尝试在sourceforge上使用小文件对话框。

答案 2 :(得分:0)

您有两种选择:

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

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

答案 3 :(得分:0)

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

有关示例,请参阅 QT doccumentaion 。它有很多。

答案 4 :(得分:0)

还有QFileSystemModel,它可以映射到QTreeView项目,并将通过其内部实现执行您需要的许多事情。 它是多线程的,允许排序并具有许多其他不错的功能。寻找documentation here

答案 5 :(得分:-2)

如果排序是你的程序唯一做的事情,如果要在unix-y环境中使用,那么我建议将程序作为命令行工具,并用某种脚本语言创建一个GUI包装器来调用该程序。代码更简单,更有用(你可以以半个工具的价格获得两个工具),它也可以更容易地移植到其他GUI环境,并使其更容易分发。

这个shellcript打开一个文件选择器对话框并运行你的程序(创造性地命名为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。这些文件更容易编写和修改(或使用GUI构建器创建和修改),然后编写和修改原始C或C ++。

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

PS。 QT使用预处理器来缓解C ++中GUI编程的痛苦,但它仍然处于非常低的水平,并且仍然不必要使用。