2016-08-19 5 views
1

Я пытаюсь добавить фильтр и метод сортировки в tableView, и для этого мне нужно использовать QSortFilterProxyModel. Моя проблема в том, что исходная модель на witch, которую я использую QSortFilterProxyModel, требует, чтобы все ячейки таблицы были открыты в редакторе mod. После того, как я добавлю QStandardItemModel в QSortFilterProxyModel, ячейки уже не доступны в режиме редактирования.QSortFilterProxyModel в openPersistentEditor

Это работает, как ожидалось:

QStandardItemModel *model = new QStandardItemModel(0, 5, this); //reimplemented class 
QItemDelegate *mydelegate = new QItemDelegate(this); //reimplemented class 

ui -> tableView -> setModel(model); 
ui -> tableView -> setItemDelegate (mydelegate); 

for(size_t i=0; i<m_BoardingsVector.size(); i++) //a structure from a function that adds rows dynamically 
{ 
     model -> insertRows(model -> rowCount(),1); 
     for(int j=0; j<5; ++j) 
     ui -> tableView -> openPersistentEditor(model -> index(model -> rowCount() - 1, j)); 
} 

клетки отображаются, только если я дважды щелкните на клетках. Это означает, что метод openPersistestentEditortableView работает неправильно.

QStandardItemModel *model = new QStandardItemModel(0, 5, this); //reimplemented class 
QItemDelegate *mydelegate = new QItemDelegate(this); //reimplemented class 

QSortFilterProxyModel * m_proxyModel = new QSortFilterProxyModel(); 
m_proxyModel -> setSourceModel(model); 

ui -> tableView -> setModel(m_proxyModel); 
ui -> tableView -> setItemDelegate (mydelegate); 
ui -> tableView -> sortByColumn(0, Qt::AscendingOrder); 
ui -> tableView -> setSortingEnabled(true); 


for(size_t i=0; i<m_BoardingsVector.size(); i++) //a structure from a function that adds rows dynamically 
{ 
     model -> insertRows(model -> rowCount(),1); 
     for(int j=0; j<5; ++j) 
     ui -> tableView -> openPersistentEditor(model -> index(model -> rowCount() - 1, j)); 
} 

ответ

0

Я просто имел этот вопрос и просто читать ваш вопрос и фрагмент кода, заставил меня осознать ошибку:

Вид (ui->tableView) установлен для работы с одной моделью (m_proxyModel), но индекс редактор приходит из другой модели (model). Это, вероятно, не имеет никакого смысла для представления.

Изменение:

ui -> tableView -> openPersistentEditor(model -> index(model -> rowCount() - 1, j)); 

к:

ui -> tableView -> openPersistentEditor(m_proxyModel -> index(model -> rowCount() - 1, j)); 

должны заботиться о вашей проблеме, я считаю.

Для меня возникла другая проблема с тем, что редактор не отображается в правой ячейке, но, вероятно, что-то не так с моей реализацией подкласса QAbstractProxyModel (что обычно не рекомендуется).


я взял короткий проблеск на source code для QAbstractItemView, и я не нашел явного ограничения еще, но это по-прежнему самое разумное объяснение, которое я могу думать.

Смежные вопросы