Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: CProger от Апрель 05, 2010, 14:21



Название: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: CProger от Апрель 05, 2010, 14:21
Вообще в идеале нужен компонент, чтобы умел не только директории отображать, но и напротив каждой директории иметь checkbox, чтобы можно было отмечать некоторые из них..

Подскажите, в какую сторону смотреть, чтобы сделать подобное? Может что-то уже есть из стандартного?


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: alexman от Апрель 05, 2010, 14:25
Свой виджет?


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: CProger от Апрель 05, 2010, 14:57
ну если ничего нет, то наверное свой прийдётся писать, раз никакого выхода больше нет.

А никакого компонента листинга директорий нет в QT?


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: alexman от Апрель 05, 2010, 14:58
QString QFileDialog::getExistingDirectory ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly )   [static]


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: QCasper от Апрель 05, 2010, 15:17
ну если ничего нет, то наверное свой прийдётся писать, раз никакого выхода больше нет.

А никакого компонента листинга директорий нет в QT?

Посмотри QFileSystemModel, возможно тебе нужно всего лишь слегка модифицировать готовые классы.


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: CProger от Апрель 05, 2010, 15:19
QString QFileDialog::getExistingDirectory ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly )   [static]
Опробовал.. о, супер! такое мне тоже очень пригодится. Спасибо!

А вообще я имел ввиду не диалоговое окно, а компонент, который вставляется на форму и там отображает такую же иерархию директорий.. В идеале, с возможностью выбора нескольких директорий. Но видать это самому писать прийдётся)


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: CProger от Апрель 05, 2010, 15:20
ну если ничего нет, то наверное свой прийдётся писать, раз никакого выхода больше нет.

А никакого компонента листинга директорий нет в QT?

Посмотри QFileSystemModel, возможно тебе нужно всего лишь слегка модифицировать готовые классы.
Спасибо! Посмотрю.

Тут тема, кстати, похожая была :) http://www.prog.org.ru/topic_10074_0.html;wap2


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: CProger от Апрель 05, 2010, 21:15
Я нашёл такой компонент! :D

А не подскажите ли, как убрать колонку даты и размера, чтобы оставить только колонку имени файла?

Код
C++ (Qt)
class QDirModelExt : public QDirModel {
 
Q_OBJECT
 
public:
typedef QDirModel parent;
 
virtual Qt::ItemFlags flags( const QModelIndex &index ) const;
virtual QVariant data( const QModelIndex &index, int role )const;
virtual bool setData( const QModelIndex &index, const QVariant& value, int role );
 
private:
mutable std::map<qint64, Qt::CheckState> m_checkedItems;
 
};
 
Qt::ItemFlags QDirModelExt::flags( const QModelIndex & index ) const {
 
return QDirModel::flags( index ) | Qt::ItemIsUserCheckable;
 
}
 
QVariant QDirModelExt::data( const QModelIndex& index, int role ) const {
 
if( role == Qt::CheckStateRole && index.column()==0 ) {
return QVariant( m_checkedItems[ index.internalId() ] );
}
 
return parent::data( index, role );
}
 
bool QDirModelExt::setData( const QModelIndex& index, const QVariant& value, int role ) {
 
if( role == Qt::CheckStateRole && index.column() == 0 ) {
 
m_checkedItems[ index.internalId() ] = static_cast<Qt::CheckState>( value.toInt() );
return true;
 
}
 
return parent::setData(index, value, role);
 
}
 
использование:
QSplitter *splitter = new QSplitter;
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath( QDir::currentPath() );
 
QDirModelExt *dirModelExt = new QDirModelExt();
QTreeView *tree = new QTreeView( splitter );
tree->setModel( dirModelExt );
 
layout->addWidget( tree, .... );
 


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: Anarion от Апрель 05, 2010, 23:23
Можно просто скрыть ненужные колонки методом
Код:
setColumnHidden ( int column, bool hide )
для модели.

В твоем случае, чтобы скрыть колонки в модели QTreeView *tree можно сделать так:
 
Код:
...
  tree->setModel( dirModelExt );

  tree->setColumnHidden(1,true); //размер
  tree->setColumnHidden(2,true); //тип
  tree->setColumnHidden(3,true); //дата изменения
...


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: CProger от Апрель 06, 2010, 12:11
Anarion
Спасибо! Сработало!


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: pastor от Апрель 06, 2010, 12:19
Цитировать
Note: The usage of QDirModel is not recommended anymore. The QFileSystemModel class is a more performant alternative.


Название: Re: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?
Отправлено: serg_hd от Апрель 07, 2010, 02:20
Цитировать
Note: The usage of QDirModel is not recommended anymore. The QFileSystemModel class is a more performant alternative.
ага
Код:
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView(splitter);
tree->setModel(model);