代码之家  ›  专栏  ›  技术社区  ›  DarenW

什么决定了QFileDialog中文件的排序?

  •  5
  • DarenW  · 技术社区  · 15 年前

    用户通过QFileDialog在我们的应用程序中打开文件。文件名的顺序很奇怪。是什么决定了排序顺序,我们如何使它按文件名排序,或者以其他方式强制我们自己的排序,也许给它一个指向我们自己的比较函数的指针?

    这主要是一个Linux应用程序,但也运行在Mac上。(我对麦克一无所知。)

    QtFileDialog chooser(parent, caption, directory, filter);
    /// QtFileDialog is our class derived from QFileDialog
    
    chooser.setModal(true);
    chooser.setAcceptMode(acceptMode);
    chooser.setFileMode(fileMode);
    
    QStringList hist = chooser.history();
    chooser.setHistory(hist);
    
    /* point "x" */
    
    if(chooser.exec()) {    
        QStringList files = chooser.selectedFiles();
        ...blah blah blah...
    

    从其中一个答案中,我尝试了一个邪恶的实验,在“x点”添加了这个错误的猜测代码:

    QSortFilterProxyModel *sorter = new QSortFilterProxyModel();
    sorter->sort(1);  // ???
    chooser.setProxyModel(sorter);
    

    3 回复  |  直到 15 年前
        1
  •  4
  •   Arnold Spence    15 年前

    QFileDialog 通过呼叫 exec() 局部视图 . 这将为您提供一些列标题,您可以单击这些标题对文件进行排序。下次打开对话框时应该记住该模式,但您可以通过调用 setViewMode(QFileDialog::Detail) 打电话之前 执行()

    另一种方法是调用静态函数 QFileDialog::getOpenFileName() 它将打开一个文件对话框,该对话框是您运行的操作系统的本机文件。您的用户可能更喜欢熟悉此选项。

    关于来自OP的屏幕cap中的排序顺序: alt text

    这个屏幕截图实际上显示了一个排序的列表。我不知道列表行为是源于Qt对话框还是源于底层文件系统,但我知道windowsxp和以后的版本都是这样做的。

    对嵌入数字的文件名进行排序时,任何连续数字的运行都被视为单个数字。使用更经典的纯字符串排序,文件的排序方式如下:

    A_A_10e0
    A_A_9a05
    

    一个字符接一个字符,第一个1在第9个之前排序。

    A_A_9a05
    A_A_10e0
    

    9比10先排序。

    更新2:

    这个 QSortFilterProxyModel 默认情况下,将按字母顺序对字符串排序,因此使用它来获取所需的行为不需要太多工作。在示例中有“点x”的地方使用以下代码。。(你差点就吃到了:)

    QSortFilterProxyModel *sorter = new QSortFilterProxyModel();
    sorter->setDynamicSortFilter(true); // This ensures the proxy will resort when the model changes
    chooser.setProxyModel(sorter);
    
        2
  •  2
  •   Grant Lammi    15 年前

    我认为您需要做的是创建一个QSortFilterProxyModel,然后使用QFileDialog::setProxyModel(QAbstractProxyModel*proxyModel)在QFileDialog中设置它

    这里有一些相关的链接到qt4.6文档。

    http://doc.trolltech.com/4.6/qfiledialog.html#setProxyModel

    http://doc.trolltech.com/4.6/qsortfilterproxymodel.html#details

        3
  •  0
  •   liaK    15 年前

    Qt 库。。。但是在本机操作系统实现时。。

    例如在Windows中,

    QFileDialog ,它将按显示文件和目录 Name MS- Word 姓名 已排序 默认情况下

    我不确定其他的环境,因为我不习惯它们。。。

    但在Windows中,您可以通过在“文件和目录”显示区域中单击鼠标右键来更改排序顺序,并可以选择您喜欢的选项。。例如 名称、大小、类型、已修改 MS-Word 应用程序。。。

    QFile对话框 的。。。