3

当我在 Qt5 中处理与文件管理器非常相似的东西时,我尝试实现一个非常基本的树视图,只显示目录名称而没有任何其他信息。但是,(似乎)QTreeView并没有让我决定要显示哪些列。

这是我所拥有的:

// ...
QString m_path = "C:/Users/mine";

dirModel = new QFileSystemModel(this);
dirModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
dirModel->setRootPath(m_path);

ui->treeView->setModel(dirModel);
// ...

现在我的QTreeView显示更多信息的名称,如尺寸等;但是,这不是所需的行为。

设置headerVisiblefalse删除我的“标题”QTreeView是可以的,但我怎样才能完全删除其他列?我试过了:

ui->treeView->hideColumn(1);

只是为了测试它是否有效,但它并没有改变任何事情。

4

2 回答 2

4
QTreeView* treeView = new QTreeView(centralWidget());
QFileSystemModel* fsModel = new QFileSystemModel(treeView);
fsModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
fsModel->setRootPath("/home/user");
treeView->setModel(fsModel);
// first column is the name
for (int i = 1; i < fsModel->columnCount(); ++i)
    treeView->hideColumn(i);

QHBoxLayout* hLayout = new QHBoxLayout(centralWidget());
hLayout->addWidget(treeView);

这里的另一种方法(PyQt,但逻辑仍然相同):PyQt:删除不必要的列

于 2015-09-24T15:15:05.770 回答
2

你的方法没有错。它的工作原理如下:

主窗口标题:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QFileSystemModel * dirModel;
};

主窗口源:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString m_path = "E:";

    dirModel = new QFileSystemModel(this);
    dirModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
    dirModel->setRootPath(m_path);

    ui->treeView->setModel(dirModel);

    ui->treeView->hideColumn(1);
}
于 2015-09-24T14:43:23.310 回答