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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопросы по QTreeView  (Прочитано 3864 раз)
Jhonny
Гость
« : Май 10, 2009, 13:27 »

Здравствуйте.
Значит есть QTreeView, использующий модель QStandardItemModel; также используется QSortFilterProxyModel для сортировки.
1) как сделать, чтобы при изменении размера окна все колонки сужались/расширялись? Установка Stretch в resizeMode header'a не помогает, хотя это работает для QTreeWidget.

2) данные в каждый item считываются из своего файла, затем по щелчку на item'e нужно обратиться к соответствующему файлу. Как связать файл с итемом? Пока записываю имя файла в дополнительную колонку, которую затем прячу. Обращение сделал вот так:

connect(inMail, SIGNAL(clicked(QModelIndex)), this, SLOT(clicked(QModelIndex))); //inMail это QTreeView
void Mail::clicked(const QModelIndex &index)
{
    QDir dir = QDir(qApp->applicationDirPath());
    QStandardItem *item = model->itemFromIndex(index);
    QString filename = model->data(model->index(index.row(), 3)).toString();
    //...
}

Это работает, но при пересортировке не происходит обновления модели, т.е. визуально дерево изменилось, а итемы остались на своих местах. Что с этим делать?

Записан
EhTemka
Гость
« Ответ #1 : Май 11, 2009, 21:34 »

По поводу 1-го точно не знаю.

А по поводу 2-го, связать файл с итемом можно разными способами. Всё зависит от того, зачем это нужно. Так как это делаете Вы, тоже можно. Только нужно учитывать то, что используется QSortFilterProxyModel. Индекс, который передается в clicked(const QModelIndex &) - это индекс прокси модели. Чтобы получить нужный вам индекс в модели данных, используйте функцию QSortFilterProxyModel::mapToSource.

Вот так:

Код
C++ (Qt)
void Mail::clicked(const QModelIndex &index)
{
   QSortFilterProxyModel *modelProxy = (QSortFilterProxyModel *)(model());
 
   QModelIndex indexSource = modelProxy->mapToSource(index);
 
   QDir dir = QDir(qApp->applicationDirPath());
   QStandardItem *item = model->itemFromIndex(indexSource);
   QString filename = modelSource->data(modelSource->index(indexSource.row(), 3)).toString();
   //...
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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