带有 QFileSystemModel 的 QTreeView:如何删除 "Name" 以外的所有列?
QTreeView with QFileSystemModel: How can I remove all columns except "Name"?
当我在 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
显示更多关于名称的信息,例如尺寸等;然而,这不是我们想要的行为。
将 headerVisible
设置为 false
会删除我的 QTreeView
的 "headline" 这没问题,但我如何才能完全删除其他列?我试过了:
ui->treeView->hideColumn(1);
只是为了测试它是否有效,但它并没有改变任何事情。
你的方法没有问题。它的工作原理如下:
主窗口header:
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);
}
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: removing unnecessary columns
当我在 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
显示更多关于名称的信息,例如尺寸等;然而,这不是我们想要的行为。
将 headerVisible
设置为 false
会删除我的 QTreeView
的 "headline" 这没问题,但我如何才能完全删除其他列?我试过了:
ui->treeView->hideColumn(1);
只是为了测试它是否有效,但它并没有改变任何事情。
你的方法没有问题。它的工作原理如下:
主窗口header:
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);
}
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: removing unnecessary columns