【问题标题】:QTreeView Display DirectoryQTreeView 显示目录
【发布时间】:2015-12-16 04:53:35
【问题描述】:

我目前正在尝试制作一个 QTreeView 来显示计算机上文件夹的内容。但是,我遇到了一些奇怪的问题。和 .. 显示在树视图中,我不希望这种情况发生。我怎么想禁用显示。和 .. 在树视图中?

这是 QTreeView 的代码。

model = new QDirModel(this);
model->setReadOnly(true);
model->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
model->setFilter(QDir::Dirs);

ui->treeView->setModel(model);

// expand to D: Directory
QModelIndex index = model->index("D:/");
ui->treeView->expand(index);
ui->treeView->scrollTo(index);
ui->treeView->setCurrentIndex(index);
ui->treeView->resizeColumnToContents(0);

【问题讨论】:

  • 在 setFilter 中添加标志 QDir::NoDotAndDotDot...
  • 我添加了 QDir::NoDotAndDotDot 但我不能再展开文件夹了
  • 似乎两条 setFilter 行不起作用,而是使用 setFilter(QDir::NoDotAndDotDot | QDir:Dirs) 有效!

标签: c++ qt


【解决方案1】:

终于找到答案了:

model->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);

使用以下内容将不起作用,因为树视图可以在每个文件夹上展开:

model->setFilter(QDir::Dirs);
model->setFilter(QDir::NoDotAndDotDot);

【讨论】:

  • 那是因为第二个setFilter 替换了第一个。
  • 感谢您的澄清。我不知道。
【解决方案2】:

你看过这个? 这是 Qt 创建者提供的标准 Qt 示例,他们正在做您想做的完全相同的事情。

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

        QFileSystemModel model;
        model.setFilter( QDir::Dirs | QDir::NoDotAndDotDot );
        model.setRootPath("");
        QTreeView tree;
        tree.setModel(&model);

        // Demonstrating look and feel features
        tree.setAnimated(false);
        tree.setIndentation(20);
        tree.setSortingEnabled(true);

        tree.setWindowTitle(QObject::tr("Dir View"));
    #if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5)
        tree.showMaximized();
    #else
        tree.resize(640, 480);
        tree.show();
    #endif

        return app.exec();
    }

【讨论】:

  • 是的,我之前看过这个,因为我使用 QtCreator 作为界面,部分代码对我来说效果不佳,但无论如何,我解决了几个问题几分钟前
  • 我也在使用 QtCreator,这段代码应该可以正常工作,因为它是 Qt 提供的示例代码。我真的很想知道为什么它没有。
猜你喜欢
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多