Russian Qt Forum

Qt => Model-View (MV) => Тема начата: nixman05 от Апрель 09, 2009, 17:32



Название: QListView и QStandardItemModel
Отправлено: nixman05 от Апрель 09, 2009, 17:32
Есть экземпляры класса
QListView *listView;
QStandardItemModel *model;

Далее в коде заполняется модель model и устанавливается в качестве модели для listView


Код
C++ (Qt)
 
   model->removeRows(0,model->rowCount(QModelIndex()),QModelIndex());
   for(int i=0;i<list.count();++i)
   {
       QString s=list.at(i);
       model->insertRows(i,1,QModelIndex());
       model->setData(model->index(i,0,QModelIndex()),QVariant(s),Qt::DisplayRole);
   }
 
   listView->setModel(model);
   listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
   listViewt->update();
 
 

при этом listView остается пустым,
но std::cout<<model->rowCount()<<std::endl; выдает количество строк в модели.

Каким образом отобразить содержимое модели в  listView ?


Название: Re: QListView и QStandardItemModel
Отправлено: spirit от Апрель 09, 2009, 17:35
а че не использовать QStandardItem?  :)


Название: Re: QListView и QStandardItemModel
Отправлено: Rcus от Апрель 09, 2009, 17:38
Я не вижу кода добавляющего колонки.


Название: Re: QListView и QStandardItemModel
Отправлено: nixman05 от Апрель 09, 2009, 17:57
Я не вижу кода добавляющего колонки.

После изменения
Код
C++ (Qt)
model=new QStandardItemModel(0,1,this)
 

 все заработало.

Да и еще такой вопрос.
Необходимо, чтобы элементы можно было отмечать. Цикл заполнение модели был изменен следующим образом:
Код
C++ (Qt)
 
   for(int i=0;i<list.count();++i)
   {
       QString s=list.at(i);
       model->insertRows(i,1,QModelIndex());
       model->setData(model->index(i,0,QModelIndex()),QVariant(s),Qt::DisplayRole);
       model->setData(model->index(i,0,QModelIndex()),QVariant(true),Qt::CheckStateRole);
   }
 
 

элементы устанавливаются в состояние checked, но являются неактивными.

Каким образом сделать доступной возможность изменения состояния элемента.


Название: Re: QListView и QStandardItemModel
Отправлено: EhTemka от Апрель 09, 2009, 18:19
void QAbstractItemView::setEditTriggers ( QAbstractItemView::::EditTriggers triggers );


Название: Re: QListView и QStandardItemModel
Отправлено: nixman05 от Апрель 09, 2009, 19:20
void QAbstractItemView::setEditTriggers ( QAbstractItemView::::EditTriggers triggers );

С помощью его можно управлять конвертируемостью текста элемента, а каким образом управлять доступностью изменения состояния


Название: Re: QListView и QStandardItemModel
Отправлено: spirit от Апрель 09, 2009, 19:53
читай про Qt::ItemFlags. и как я говорил выше -- юзай QStandardItem раз уже юзаешь QStandardItemModel.  :)
см. метод QStandardItem::setCheckable & QStandardItem::setCheckState.


Название: Re: QListView и QStandardItemModel
Отправлено: nixman05 от Апрель 09, 2009, 21:23
читай про Qt::ItemFlags. и как я говорил выше -- юзай QStandardItem раз уже юзаешь QStandardItemModel.  :)
см. метод QStandardItem::setCheckable & QStandardItem::setCheckState.

А если вместо QStandartItemModel использовать QSortFilterProxyModel (необходима фильтрация значений, находящихся в модели) то что тогда


Название: Re: QListView и QStandardItemModel
Отправлено: spirit от Апрель 10, 2009, 08:28
тогда используются замечательные методы
QSortFilterProxyModel::mapToSource
& QSortFilterProxyModel::mapFromSource и получается айтем по индексу.  ;)