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で、サイズなどの名前でより多くの情報が表示されます。ただし、これは望ましい動作ではありません。

私の「見出し」を削除するように設定headerVisibleしても問題ありませんが、他の列を完全に削除するにはどうすればよいですか? 私は試した:falseQTreeView

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 に答える