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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отображение различных виджетов для различных элементов модели  (Прочитано 3202 раз)
Fat-Zer
Гость
« : Январь 09, 2011, 05:56 »

Собственно сабж.
Есть модель, есть TreeView, при выборе определённого элемента в виде надо на соседнем виджете отобразить правильное окно настроек. Как это правильно было бы сделать?
Записан
Karl-Philipp
Гость
« Ответ #1 : Январь 09, 2011, 11:17 »

Можно, например, определять индекс элемента в TreeView, на основе чего отображать нужные настройки.
Записан
Fat-Zer
Гость
« Ответ #2 : Январь 09, 2011, 11:44 »

Можно, например, определять индекс элемента в TreeView, на основе чего отображать нужные настройки.

Сейчас делаю так:
Код
C++ (Qt)
connect(ui->treeView->selectionModel(),
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this, SLOT(updateItemEdit(QItemSelection)));
//......................
 
void MainWindow::updateItemEdit(const QItemSelection & itsel)
{
delete itemEditWidget;
itemEditWidget = ((SceneItem*)itsel.indexes().first().internalPointer())
->createSettingWidget(ui->itemEdit);
ui->itemEdit->layout()->addWidget(itemEditWidget);
 
}
 
Где createSettingWidget(ui->itemEdit); - виртуальный метод у каждого наследника SceneItem, который создаёт виджет с данным родителем.
Вы, я так понял, тоже самое имели в виду?

Но я собираючь отказываться от SceneItem'ов, так как модель это просто интерфейс между своей структурой данных и видом qt, а так как она сейчас реализована приходится выращивать отдельную иерархию для айтемов для модели параллельно с основной структурой и там приходится применять различные неуклюжие методы. Да и выглядит всё это очень громоздко... Если у меня до этого руки дойдут, то хочу избавится от этого "второго дерева" и получать этот виджет через саму модель (может использовать свою роль Непонимающий) что посоветуете?
Записан
Karl-Philipp
Гость
« Ответ #3 : Январь 09, 2011, 11:58 »

Я думал сделать что-то вроде такого:

Код
C++ (Qt)
bool TreeView::event(QEvent *event)
{
   emit signalCurrentIndex(currentIndex());
 
   return QWidget::event(event);
}
 
...
QObject::connect(treeViewObject, SIGNAL(signalCurrentIndex(QModelIndex)), settingsWidget, SLOT(slotShowCustomSettings(QModelIndex)));


В слоте определять номер строки (и если надо столбца элемента) на основе чего показывать соответствующие настройки.
Записан
Fat-Zer
Гость
« Ответ #4 : Январь 09, 2011, 12:20 »

Тоже вариант... но надо ещё думать какой фильтр на событие прикрутить... не по каждому же чиху виджет дёргать... и опять же проблема как поприличней соотнести QModelIndex с нужным виджетом в итоге получаем теже яица, только в профиль... да и наследовать надо QTreeWidget... =/
Записан
Karl-Philipp
Гость
« Ответ #5 : Январь 09, 2011, 12:56 »

Возможно стоило глянуть сначала на
Цитировать
void QAbstractItemView::activated ( const QModelIndex & index ) [signal]

This signal is emitted when the item specified by index is activated by the user.
по поводу соотношения QModelIndex с нужным виджетом:
ничего не вижу неприличного в том, чтобы связывать сигнал и слот, передавая текущий индекс Улыбающийся В классе QModelIndex есть же методы row() и colomn().
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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