Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alexandr Az от Октябрь 31, 2010, 19:22



Название: Занудный QTableWidgetItem
Отправлено: Alexandr Az от Октябрь 31, 2010, 19:22
Есть TableWidget, содержащий соответствующие итемы. Итемы  (QTableWidgetItem) хочется привязать к своим данным, т.е. чтобы  ссылались на объект. Как для меня ни странно, не нашёл в описания класса соответствующего поля - указателя, который я мог бы туда пхать (привет Delphi, property Tag)

Варианты решения проблемы:

1. Тупо и быстро - наследуем QTableWidgetItem и суём туда что хотим. Единственное - придётся делать приведение типов.
2. Подход в стиле QT - QVariant, определяем UserType, всякие Q_DECLARE_METATYPE и т.д.

Собственно вопрос:
  Как связать QVariant с отображением его в TableWidget? Если мы засунем туда (в QVariant), скажем число, оно отобразится. Если засунем туда QColor - он тоже отобразится (шестнадцатеричное значение цвета). Хочу заметить, что о QColor QVariant ничегошеньки не знает, в отличии от простых типов.  Уточняю вопрос: Как это гребаный QVariant знает как преобразовать QColor в строку и подсунуть куда нужно? (исходники перерыл).
  Второй, риторически-философский вопрос. Почему так сложно это делать по правилам в QT, когда в лоб гораздо проще....


Название: Re: Занудный QTableWidgetItem
Отправлено: BlackTass от Октябрь 31, 2010, 19:45
Есть еще один вариант, заюзать модель-вью и в индексах в internalPointer хранить указатель на нужный объект.
Про QVariant ничо не понял. Вообще вариант знает о колоре, просто для него нет спец-метода (так как QVariant входит в QtCore, а QColor это часть QtGui), но через шаблонный метод value() колор вполне возвращается


Название: Re: Занудный QTableWidgetItem
Отправлено: Alexandr Az от Октябрь 31, 2010, 21:10
Есть еще один вариант, заюзать модель-вью.......

В данном случае, овчинка выделки не стоит. Да и неверно это с точки зрения похода.

...... но через шаблонный метод value() колор вполне возвращается

А тут поподробнее можно?


Название: Re: Занудный QTableWidgetItem
Отправлено: kibsoft от Октябрь 31, 2010, 21:39
Цитировать
В данном случае, овчинка выделки не стоит. Да и неверно это с точки зрения похода.
Вообще тролли рекомендуют использовать именно Model/View вместо "удобных" вьюверов.. С MV производительность увеличится, да и гемора не будет как с QTableWidget..


Название: Re: Занудный QTableWidgetItem
Отправлено: Alexandr Az от Октябрь 31, 2010, 22:53
Цитировать
Вообще тролли рекомендуют использовать именно Model/View вместо "удобных" вьюверов.. С MV производительность увеличится, да и гемора не будет как с QTableWidget..

Дело не в удобстве, а в прагматизме. Как видите, я здесь больше рассуждаю о самой библиотеке и подходах, чем о реальных реализациях. А если нету модели? Расскажу о задаче. Коннект к БД. Слева наименования коннектов, справа - пункты коннекта (хост, юзер нейм и так далее ). Невозможно сделать модель  - класс QSettings не поддерживает все те фитчи, которые нужны в данной модели для GUI (к примеру, сопоставление параметров с их визуальным отображением). Да и вообще, задача не того уровня, чтобы ДЕЛАТЬ МОДЕЛЬ для окна коннекта.