Использование пользовательской роли в QTreeView вместо DisplayRole - PullRequest
2 голосов
/ 14 января 2012

Простой вопрос (надеюсь, с простым ответом).

QTreeView передаст Qt.DisplayRole в функцию данных модели при выборке строк для отображения по умолчанию. Но скажем, что я хотел передать MyAwesomeTreeDisplayRole вместо Qt.DisplayRole, что мне нужно сделать?
Я не могу найти ничего о том, где представление решает использовать displayrole или как переопределить его.

Прямо перед тем, как вы спросите, почему я хочу делать такие ужасные вещи ..

По сути, мой QAbstractItemModel предназначен для использования как для дерева (1 столбец), так и для таблицы (несколько столбцов, основанных на родительском элементе). Использование одного и того же DisplayRole для обоих типов представлений на самом деле не работает, с тех пор я вынужден возвращать одинаковые данные для обоих. Это приводит к тому, что я вижу только первый столбец в древовидной структуре, когда я хочу вернуть объединение нескольких столбцов.

Я думаю, что самым простым способом было бы просто использовать пользовательские роли (TreeDisplayRole и TableDisplayRole).

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Я использовал QTreeView для просмотра простой таблицы со многими столбцами - она ​​работает хорошо - вы можете настроить количество столбцов, отправив ему сигнал columnCountChanged.Поэтому я не уверен, что вам нужно делать то, что вы просите.

Но я также использовал ItemDelegates: используйте my_treeview.setItemDelegate (), чтобы указать древовидное представление для вашего делегата элемента.Если это подклассы QStyledItemDelegate, тогда ему не нужно делать много работы - он в основном может просто передать все это супер.

Роли пользователя тогда просто согласовываются между вашим пользовательским ItemDelegate и вашим ItemModel и могут быть чем угодно.вам нравится, если они> = чем QtCore.Qt.UserRole.

(Правка: Извините, я вставил это как новый ответ, но на самом деле это просто проработка того, что сказал Lol4t0 - кроме columnCountChangedвещь)

0 голосов
/ 14 января 2012

Я не знаю, как это сделать в python, но вы должны создать свой собственный делегат для визуализации данных элементов. Фактически делегат - это объект, который запрашивает любые данные из индексов и отображает их

Обратите внимание, что в общем случае QTreeView может отображать несколько столбцов , вы должны только columnCount установить в правильно для индекса верхнего уровня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...