Russian Qt Forum
Ноябрь 24, 2024, 10:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужен компонент обзора директорий компьютера. Есть ли что-то такое в QT?  (Прочитано 7387 раз)
CProger
Гость
« : Апрель 05, 2010, 14:21 »

Вообще в идеале нужен компонент, чтобы умел не только директории отображать, но и напротив каждой директории иметь checkbox, чтобы можно было отмечать некоторые из них..

Подскажите, в какую сторону смотреть, чтобы сделать подобное? Может что-то уже есть из стандартного?
Записан
alexman
Гость
« Ответ #1 : Апрель 05, 2010, 14:25 »

Свой виджет?
Записан
CProger
Гость
« Ответ #2 : Апрель 05, 2010, 14:57 »

ну если ничего нет, то наверное свой прийдётся писать, раз никакого выхода больше нет.

А никакого компонента листинга директорий нет в QT?
Записан
alexman
Гость
« Ответ #3 : Апрель 05, 2010, 14:58 »

QString QFileDialog::getExistingDirectory ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly )   [static]
Записан
QCasper
Гость
« Ответ #4 : Апрель 05, 2010, 15:17 »

ну если ничего нет, то наверное свой прийдётся писать, раз никакого выхода больше нет.

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

Посмотри QFileSystemModel, возможно тебе нужно всего лишь слегка модифицировать готовые классы.
Записан
CProger
Гость
« Ответ #5 : Апрель 05, 2010, 15:19 »

QString QFileDialog::getExistingDirectory ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly )   [static]
Опробовал.. о, супер! такое мне тоже очень пригодится. Спасибо!

А вообще я имел ввиду не диалоговое окно, а компонент, который вставляется на форму и там отображает такую же иерархию директорий.. В идеале, с возможностью выбора нескольких директорий. Но видать это самому писать прийдётся)
Записан
CProger
Гость
« Ответ #6 : Апрель 05, 2010, 15:20 »

ну если ничего нет, то наверное свой прийдётся писать, раз никакого выхода больше нет.

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

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

Тут тема, кстати, похожая была Улыбающийся http://www.prog.org.ru/topic_10074_0.html;wap2
Записан
CProger
Гость
« Ответ #7 : Апрель 05, 2010, 21:15 »

Я нашёл такой компонент! Веселый

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

Код
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, .... );
 
Записан
Anarion
Гость
« Ответ #8 : Апрель 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); //дата изменения
...
Записан
CProger
Гость
« Ответ #9 : Апрель 06, 2010, 12:11 »

Anarion
Спасибо! Сработало!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Апрель 06, 2010, 12:19 »

Цитировать
Note: The usage of QDirModel is not recommended anymore. The QFileSystemModel class is a more performant alternative.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #11 : Апрель 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);
Записан

kubuntu/Win7/x64/NetBeans
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.153 секунд. Запросов: 23.