2015-09-24 8 views
1

В то время как я работаю над чем-то в Qt5, который очень похож на файловый менеджер, я пытаюсь реализовать очень простое древовидное представление, отображающее только имена каталогов без какой-либо другой информации. Однако (кажется, что) QTreeView не позволяет мне решить, какие столбцы я хочу показать.QTreeView с QFileSystemModel: как удалить все столбцы, кроме «Имя»?

Вот что у меня есть:

// ... 
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, который в порядке, но как я могу удалить остальные столбцы полностью? Я пробовал:

ui->treeView->hideColumn(1); 

только для проверки, если это работает, но это ничего не меняет.

+1

'hideColumn' делает то, что вы пытаетесь сделать. Вы уверены, что вызвали его * после того, как * модель была инициализирована? http://doc.qt.io/qt-5/qtreeview.html#hideColumn –

+0

Я пытаюсь использовать его после 'setModel'. –

ответ

3
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

+0

Что должен делать этот код? – user23573

+0

скрывает все столбцы, кроме первой колонки (name). – ramtheconqueror

+0

^Это работает, спасибо! –

2

Нет ничего плохого в вашем подходе. Он работает, как показано ниже:

MainWindow Заголовок:

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

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

источник MainWindow:

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); 
} 
+0

Он не скрывает никаких столбцов, хотя ...: -/ –

+0

Можете ли вы разместить основную часть своего кода, потому что приведенный выше код скрывает столбец «Размер» на моем компьютере. – user23573

+0

Хм, столбцы идентичны для всех версий Windows? –

 Смежные вопросы

  • Нет связанных вопросов^_^