2016-06-30 7 views
0

Я использую Qt 5.6 и QStandardItemModel, заполненный QStandardItem, для отображения таблицы данных.Автоматический выбор обновления при отключении QStandardItem

Некоторые элементы включены, некоторые - нет.

Можно выбрать только разрешенные элементы (это нормальное поведение).

Но когда данные обновляются, некоторые элементы с включенным состоянием могут меняться, и это является источником моей проблемы. Рассмотрим следующий сценарий:

1 an item is enabled 
2 the user select it 
3 the item is selected 
4 the data are updated, the item is now disabled 
5 the item remain selected, despite it is disabled 

И теперь, пользователь может взаимодействовать с отключенной пункта: откройте контекстное меню, редактировать ...

Это есть некоторые «обновление» метод в рамках модели Qt/представление что я могу позвонить, чтобы обновить выбранное состояние после изменения флага?

Или существует простой (и общий) способ решить эту проблему, для всех моих позиций? (Не все таблицы, не все они основаны на QStandardItem)

Благодаря

ответ

0

EDIT: Это не похоже на работу, как включен собственности нет данных, но флаг и редактирования это не должно вызывать именованный сигнал. Подожди!

насчет подключения сигнала

void QStandardItemModel:itemChanged(QStandardItem * item) 

с некоторым хелперов кодом, как

void fixSelection(QStandardItem * item) 
{ 
    if (item.isEnabled()) { 
     // remove item from selection model of view... 
    } 
} 

Смотрите также here какую-то информацию о QItemSelectionModel.

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

+0

Я хочу сохранить текущий выбор (для элементов, которые все еще включены), вот в чем проблема! Эти данные изменяются, но только значения, и это действительно имеет смысл для пользователя сохранить текущий выбор. – Aurelien

+0

@Aurelien Таким образом, свойство * enabled * зависит от изменения данных? Тогда вышеупомянутое решение может по-прежнему работать. В противном случае вам нужно самостоятельно переключить метод 'fixSelection', который должен работать на вас. – maxik

+0

Да, включенное свойство зависит от изменения данных. Я не могу использовать ваше решение напрямую, из-за 2 причин: 1/с большим количеством элементов, есть удар производительности 2/он не работает с моделями, отличными от QStandardItem. Но я думаю, что в итоге получится аналогичная реализация – Aurelien

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

  • Нет связанных вопросов^_^