Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749

Делегат QCheckBox в QTableView

29.11.2019, 20:09. Показов 2251. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Написал делегат:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class FlagDelegate (QtWidgets.QStyledItemDelegate):
    def createEditor (self, parent, options, index):
        if not index.isValid():
            return None
        editor = QtWidgets.QCheckBox(parent)
        return editor
    def setEditorData (self, editor, index):
        if not index.isValid():
            return None
        CHval = (index.model().data(index, QtCore.Qt.EditRole))
        if CHval == 0:
            editor.setCheckState (QtCore.Qt.Unchecked)
        else: editor.setCheckState (QtCore.Qt.Checked)
    def updateEditorGeometry (self, editor, options, index):
        if not index.isValid():
            return None
        editor.setGeometry (options.rect)
    def setModelData (self, editor, model, index):
        if not index.isValid():
            return None
        UNval = editor.checkState ()
        if UNval == QtCore.Qt.Unchecked:
            modelVal = 0
        else: modelVal = 1
        model.setData (index, modelVal, QtCore.Qt.EditRole);
Однако, при его использовании:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    def set_model (self, tnsm):
        self.tab2.setModel(self.Tab_model)
        if tnsm == "pricon":
            self.tab2.setItemDelegateForColumn (1, QtSql.QSqlRelationalDelegate(self.tab2))
        if tnsm == "people":
            try:
                self.tab2.setItemDelegateForColumn (5, QtSql.QSqlRelationalDelegate(self.tab2))
                self.tab2.setItemDelegateForColumn (4, DateDelegate())
                self.tab2.setItemDelegateForColumn (6, FlagDelegate())
            except (NameError, IndexError, ZeroDivisionError) as err:
                print (err)
                
        self.tab2.resizeColumnsToContents()
        self.tab2.verticalHeader().hide()
        self.tab2.setColumnWidth (0,0)
просто происходит вылет из приложения. Ни в шелле ни в консоли ничего не пишет.
Без строки self.tab2.setItemDelegateForColumn (6, FlagDelegate()) все работает отлично. Подскажите знающие, что где не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2019, 20:09
Ответы с готовыми решениями:

Удалить делегат из QTableView
Добрый день! Как удалить делегат из QTableView? Нашел в теме то что нужно: view->setItemDelegateForColumn(2, NULL); Как...

Делегат перекрашивания ячейки QTableView
Всем привет, есть небольшой код с GUI-окном и БД (во вложении). Окно делится на две части, в верхней части вводится информация которую...

Делегат перекрашивания строки по условию в столбце QTableView
Всем привет. У меня есть вот такой делегат, который по условию в колонке перекрашивает ячейку 26 или 27 колонки в красный цвет. ...

3
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
02.12.2019, 12:06
1. Попробуйте навтыкать туда print-ов с логирующими сообщениями.
2.
Цитата Сообщение от Lekks Посмотреть сообщение
(index.model().data(index,
Странная конструкция. Почему бы не просто index.data(...)?
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
02.12.2019, 16:25  [ТС]
Решено.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
def set_model (self, tnsm):
        self.tab2.setModel(self.Tab_model)
        if tnsm == "pricon":
            self.tab2.setItemDelegateForColumn (1, QtSql.QSqlRelationalDelegate(self.tab2))
        if tnsm == "people":
            self.deleg1 = DateDelegate()
            self.deleg2 = FlagDelegate()
            self.tab2.setItemDelegateForColumn (5, QtSql.QSqlRelationalDelegate(self.tab2))
            self.tab2.setItemDelegateForColumn (4, self.deleg1)
            self.tab2.setItemDelegateForColumn (6, self.deleg2)
        self.tab2.resizeColumnsToContents()
        self.tab2.verticalHeader().hide()
        self.tab2.setColumnWidth (0,0)
Добавлено через 56 секунд
dondublon, пока учусь. Как нашел, так и вписал в код)))

Добавлено через 29 минут
dondublon, как я понял, в связи с тем, что работаем с моделью QtSql.QSqlRelationalTableModel, данные надо брать из модели, которая связана с таблицей БД, а не из того, что нарисовано в QTableView. Поэтому через ссылку на модель.

CHval = (index.model().data(index,...
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
02.12.2019, 16:46
Цитата Сообщение от Lekks Посмотреть сообщение
QtSql.QSqlRelationalTableModel, данные надо брать из модели, которая связана с таблицей БД, а не из того, что нарисовано в QTableView.
Ну это, вроде, достаточно очевидно.
Всем новичкам в qt я советую эту статью https://habr.com/ru/post/171443/ .

В чём причина, правда, я так и не понял. Но всё равно к индексу лучше обращаться покороче.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2019, 16:46
Помогаю со студенческими работами здесь

Делегат отображения даты и суммы из таблицы sqlite3 в QTableView
Всем привет. Помогите разобраться с проблемой, которую я не осилил - перерыл интернет, но так и не нашел подходящего решения. 1. Есть...

QTableView и QCheckBox
Есть QTableView, есть модель, есть делегат, который для одного из столбцов устанавливает чекбокс для редактирования. Но какая проблема с...

QTableView + QCheckBox
Доброго времени суток. Собственно подобные сабжы уже были, но у меня своя специфика. Мне необходимо чтобы в горизонтальных заголовках...

QCheckBox и QTableView
Есть QTableView. Мне надо часть данных отобразить в виде чекбокса. Хочу найти решение без наследования и запихивания чекбоксов в ячейки...

Отображение QCheckBox в QTableView
Редактор я создал. Но он открывается только при двойном клике, как и должно быть. Хочу чтобы он отображался всегда, вместо значений 0, 1....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru