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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [QTreeWidget] Построение структуры каталогов  (Прочитано 6863 раз)
Digan
Гость
« : Август 20, 2011, 19:14 »

Есть у кого-то пример построения структуры каталогов на диске на основе QTreeWidget?
То есть нужно построить дерево каталогов как например в Проводнике Windows.

Или хотя бы подскажите как с помощью Qt получить список логических дисков и список файлов в папке без применения WinAPI.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Август 20, 2011, 19:30 »

Такой сойдет?
Записан
Digan
Гость
« Ответ #2 : Август 20, 2011, 20:40 »

Такой сойдет?

Спасибо за пример.
Гм. Если пишу следующий код в конструкторе главного окна, то почему-то ничего не выводиться.

Код
C++ (Qt)
   QFileSystemModel model;
   model.setRootPath("");
   ui->treeView->setModel(&model);
 
   ui->treeView->setAnimated(false);
   ui->treeView->setIndentation(20);
   ui->treeView->setSortingEnabled(true);
 
   ui->treeView->setWindowTitle(QObject::tr("Dir View"));
   ui->treeView->show();
 
« Последнее редактирование: Август 20, 2011, 21:36 от Digan » Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #3 : Август 20, 2011, 20:56 »

потому что надо для главного окна вызвать метод show() .
Записан
Digan
Гость
« Ответ #4 : Август 20, 2011, 21:04 »

Я итак вызываю show для главного окна в main.
Имелось ввиду, что на treeView ничего не появляется при запуске. Он пустой.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Август 20, 2011, 21:15 »

model у вас локальная.
При выходе из конструктора она удаляется.
Порождайте её динамически:
Код:
    QFileSystemModel* model = new QFileSystemModel();
    model->setRootPath("");
    ui->treeView->setModel(model);
Записан
Digan
Гость
« Ответ #6 : Август 20, 2011, 21:34 »

model у вас локальная.
При выходе из конструктора она удаляется.
Порождайте её динамически:
Код:
    QFileSystemModel* model = new QFileSystemModel();
    model->setRootPath("");
    ui->treeView->setModel(model);

Благодарю. Теперь работает.

Интересует еще один вопрос. Как при клике в дереве на файл получить его полное имя?
Я так понял это нужно обрабатывать в слоте:
Код
C++ (Qt)
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
 
}
 

Но как получить полное имя файла по которому кликнул мышкой в дереве?

Пробовал такой вариант:
Код
C++ (Qt)
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
   QVariant variant = index.data();
 
   QString name = variant.value<QString>();
 
   QMessageBox *messageBox = new QMessageBox();
   messageBox->setText(name);
   messageBox->show();
}
 
Но так выводит только имя файла, а путь к нему не выводит.
 

Решено вот так:
Код
C++ (Qt)
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
   QString name = ((QFileSystemModel*)ui->treeView->model())->filePath(index);
 
   QMessageBox *messageBox = new QMessageBox();
   messageBox->setText(name);
   messageBox->show();
}
 
« Последнее редактирование: Август 20, 2011, 22:27 от Digan » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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