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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QStandardItemModel. EditRole, DisplayRole - как хранить разные данные в них?  (Прочитано 4946 раз)
Пытон
Гость
« : Март 02, 2017, 07:26 »

Код
Python
model = QtGui.QStandardItemModel()
item = QtGui.QStandardItem()
item.setData("view", QtCore.Qt.DisplayRole)
item.setData("edit", QtCore.Qt.EditRole)
 
model.appendRow([item])
 
print (model.data(model.index(0,0), QtCore.Qt.EditRole))
print (model.data(model.index(0,0), QtCore.Qt.DisplayRole))
 
Получим в итоге:
edit
edit

Т.е. и EditRole и DisplayRole хранят значение из последнего item.setData

Я чего-то не понимаю? Почему item.setData("edit", QtCore.Qt.EditRole) заодно меняет и DisplayRole?
А на кой ляд тогда нужны вообще эти EditRole и DisplayRole?
Я наивно полагал, что для того, чтобы иметь возможность отображать в ячейке таблицы одно значение, а хранить для обработки другое.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Март 02, 2017, 07:36 »

Если я не путаю :

Цитировать
Код
C++ (Qt)
[virtual] void QStandardItem::setData(const QVariant &value, int role = Qt::UserRole + 1)
.........
Note: The default implementation treats Qt::EditRole and Qt::DisplayRole as referring to the same data.
Записан
Пытон
Гость
« Ответ #2 : Март 02, 2017, 08:12 »

Премного благодарен. Данные в UserRole сохраняются и отличаются от DisplayRole
-----
Но кто-то тогда может мне объяснить для чего используется EditRole?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Март 02, 2017, 09:12 »

Он используется для того, чтобы создавать пользовательские модели, наследованные от QAbstract***Model.
Например табельный номер. Я могу выводить DisplayRole как QVariant(QStringLiteral("№%1").arg(number)), а редактировать EditRole как QVariant(number) чтобы стандартный делегат предоставлял мне виджет для редактирования чисел, а не строк и в setData принимал QVariant конвертируемый в uint.
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #4 : Март 02, 2017, 09:14 »

Qt::DisplayRole   0   The key data to be rendered in the form of text. (QString)
Qt::EditRole   2   The data in a form suitable for editing in an editor. (QString)

Допустим, вы выводите в таблице зарплату сотрудника.
Qt::DisplayRole (QString) : "1000 р."
Qt::EditRole (int для редактирования) : 1000

В зависимости от типа данных в Qt::EditRole будет создаваться соответствующий делегат для редактирования этих данных.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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