簡體   English   中英

setSortingEnabled(True)時QTableView + QFileSystemModel不排序

[英]QTableView + QFileSystemModel not sorting when setSortingEnabled(True)

考慮以下代碼段:

import sys
import os
import time

from PyQt5.Qt import *  # noqa


class Foo(QTableView):

    def __init__(self, path, extensions, parent=None):
        super().__init__(parent)

        model = QFileSystemModel(self)
        model.setRootPath(QDir.rootPath())
        model.setFilter(QDir.NoDotAndDotDot | QDir.Files)
        model.setNameFilterDisables(False)
        self.setModel(model)

        self.setShowGrid(False)
        self.verticalHeader().hide()
        self.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
        self.setSelectionMode(QAbstractItemView.SingleSelection)

        self.change_path(path)

        self.setSortingEnabled(True)

    def change_path(self, path):
        model = self.model()
        index = model.index(str(path))
        self.setRootIndex(model.index(os.path.dirname(str(path))))
        self.scrollTo(index)
        self.setCurrentIndex(index)


def main():
    app = QApplication(sys.argv)
    file_view = Foo(__file__, ["*.*"])
    file_view.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

由於某些原因,當我單擊標題時,行將不被排序,這是為什么呢?

Docs說:

QTableView :: setSortingEnabled(bool enable)如果enable為true,則啟用對表的排序,並立即使用當前的sort節和order觸發對sortByColumn()的調用。注意:屬性sortingEnabled的Setter函數。 另請參見isSortingEnabled()。

在這種情況下,主要問題是QDir.rootPath()默認情況下提供C:/ ,而我正在使用的初始路徑位於D: ,因此要使其正常工作,您需要確保setRootPath會匹配初始路徑:

即:通過model.setRootPath('D:/')更改model.setRootPath(QDir.rootPath()) model.setRootPath('D:/') ,它將正常工作。 甚至更好的是,從初始路徑中提取字母,以免對任何內容進行硬編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM