1. 程式人生 > >QFileSystemModel只顯示名稱,不顯示size,type,modified

QFileSystemModel只顯示名稱,不顯示size,type,modified

qtreeview comm font nco 效果 bsp parent eas const

Qt 提供的 QFileSystemModel可以提供文件目錄樹預覽功能,但是預覽的都自帶了Name,size,type, modified等信息。我現在只想顯示name這一列,不想顯示size,type,modified的信息。

解決辦法

辦法1:修改QFileSystemModel

寫一個子類,繼承自QFileSystemModel,然後在需要顯示size,type,modified的地方,把這些信息屏蔽掉。我知道Qt的Model顯示數據,主要是在data這個函數中,然後Model的列是通過columnCount這個函數返回的。所以我重寫columnCount函數,只返回一列,這一列就是我們想要的名稱。

#include <QtGui/QApplication>
#include <QFileSystemModel>
#include <QTreeView>

class MyFileSytemModel : public QFileSystemModel
{
public:
    //第1列顯示名稱,其他幾列都屏蔽掉
    int columnCount(const QModelIndex &parent) const
    {
        return 1;
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyFileSytemModel* model = new MyFileSytemModel;
    model->setRootPath(QDir::currentPath());

    QTreeView* treeView = new QTreeView;
    treeView->setModel(model);
    treeView->setRootIndex(model->index(QDir::currentPath()));
    treeView->show();

    return a.exec();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

最後,來個截圖。
技術分享圖片

辦法2:修改TreeView

如果我能把TreeView的第2,3,4列隱藏,也可以達到我想要的效果。結果還真被我發現了QTreeView中有個函數角setColumnHidden,使用這個函數即可。

#include <QtGui/QApplication>
#include <QFileSystemModel>
#include <QTreeView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFileSystemModel* model = new QFileSystemModel;
    model->setRootPath(QDir::currentPath());

    QTreeView* treeView = new QTreeView;
    treeView->setModel(model);
    treeView->setRootIndex(model->index(QDir::currentPath()));
    treeView->show();
    treeView->setColumnHidden(1, true);
    treeView->setColumnHidden(2, true);
    treeView->setColumnHidden(3, true);

    return a.exec();
}

https://blog.csdn.net/snail_hunan/article/details/75250992

QFileSystemModel只顯示名稱,不顯示size,type,modified