Название: Как синхронизировать Current и Selected? Отправлено: fulkabaster от Февраль 14, 2010, 13:56 Например, создаю QTableWidget. ставлю у нее свойства:
selectionMode = SingleSelection selectionBehaveour = SelectRows Таблицу заполняю объектами QTableWidgetItem, кроме первого столбца, его заполняю чек-боксами QCheckBox. В итоге если я кликаю по любой ячеке не в первом стобце, то выделяется соответствующая строка, в которой сидит эта ячейка. Но если кликаю чекбоксы, то их строка не выделяется, хотя сам чек-бокс обводится фокус-квадратиком, т.е. он становится текущим виджитом. При заполнении ячеек флаги оставляю по умолчанию (isSelectable, isEditable и т.п.). Как сделать, чтобы строка выделялась и при клике на чекбоксах? Название: Re: Как синхронизировать Current и Selected? Отправлено: fulkabaster от Февраль 14, 2010, 18:06 И еще вдогонку. Не могу разобраться с некоторыми вещами относительно вставки любого виджета в ячейку.
Вот, в другой столбец мне нужно вставлять QSpinBox-ы. Вставил. При изменении значения в спин-боксе, должно измениться содержание другой ячейки, находящейся в той же строке, что и затронутый спин-бокс. Для этого соединил сигнал таблицы cellChanged(int row, int column) со своим нужным слотом, где меняю содержимое той ячейки. Но вот только этот сигнал не испускается, если в ячейке находится не QTableWidgetItem, а QSpinBox. Понятно, что можно создавать массив указателей на спин-боксы и соединять ихсигналы valueChanged() с моим слотом, но почему не работает cellChanged? И еще - а как выравнять виджит (тот же чек-бокс) в ячейке по горизонтали? Название: Re: Как синхронизировать Current и Selected? Отправлено: BRE от Февраль 14, 2010, 18:11 Почитай про модели и делегаты.
Думаю большинство вопросов сразу отпадет. ;) Название: Re: Как синхронизировать Current и Selected? Отправлено: break от Февраль 14, 2010, 21:26 Цитировать Но если кликаю чекбоксы, то их строка не выделяется Скорее всего даже выделяется но просто чекбокс как самостоятельный виджет рисуется поверх и уже никакого выделения не видно - попробуй сделать чтобы чекбокс занимал не всю ячейка - для проверки...Читать про модели вас отправили правильно А сигнал не испускался т.к. менялось состояние чекбокса а не итема в таблице. Можно сконнектить каждый чекбокс со своей ячейкой. Или сконнектить все чекбоксы со своим слотом - но все это изврат... Модель + Делегаты предоставят более элегентное решение. Название: Re: Как синхронизировать Current и Selected? Отправлено: fulkabaster от Февраль 15, 2010, 09:26 Цитировать Но если кликаю чекбоксы, то их строка не выделяется Скорее всего даже выделяется но просто чекбокс как самостоятельный виджет рисуется поверх и уже никакого выделения не видно - попробуй сделать чтобы чекбокс занимал не всю ячейка - для проверки...Насчет моделей/делегатов я глянул в описание и книгу Бланшет, везде указано, что они оправданы при работе с большим количеством данных. В моем случае как раз данных мало - от нескольких единици до нескольких десятков строк. Но если это решит указанные мной проблемы, то правильно ли я понимаю, что нужно использовать не QTableWidget, а QTableView? Название: Re: Как синхронизировать Current и Selected? Отправлено: break от Февраль 15, 2010, 14:09 Цитировать Не выделяется, так как я поставил в свойствах выделение целой строки, а не одной ячейки (см. в первом посте), а при щелкании чекбокса выделенной остается прежняя строка. Значит действительно не выделяется т.к. указатель мышки не попадает в ячейку - а попадает на сам виджет checkbox. Опять же рповеряется увеличив размеры ячеек так чтобы чекбокс не занимал всю ее.Цитировать нужно использовать не QTableWidget, а QTableView? Правильно. И дело не только в больших объемах данные - делая на основе разделенных Модели-Представления вы будете использовать более правильную концепцию, кот. позволит избежать некоторых других проблем в будующем.А вообще можно и с TableWidget победить - когда чекбокс получает фокус выделять строку. Правда прийдется либо в чекбоксах хранить на какой строке он стоит - либо привязаться жестко к первой строке (вроде они у вас только там). Проверил у себя - если виджет не будет занимать всю ячейку и клукать в саму ячейку то все работает - так что дело в этом! Название: Re: Как синхронизировать Current и Selected? Отправлено: fulkabaster от Февраль 15, 2010, 15:40 Но это не решает мою проблему, хочется чтобы строка выделялась не только тогда, когда юзер попадает мимо чекбокса, но и когда щелкает по нему :)
Цитировать Правда прийдется либо в чекбоксах хранить на какой строке он стоит - либо привязаться жестко к первой строке (вроде они у вас только там). Если бы в строке :) Чекбоксы в первом столбце. А как можно в чекбоксе хранить, на какой он строке стоит? Это бы решило проблему.Еще я заметил, что среди флагов у QTableWidgetItem имеется IsCheckable. При этом по умолчанию он включен. Как это понимать? Ведь если втсавить QTableWidgetItem в таблицу - никаких галочек там никуда не поставить. Название: Re: Как синхронизировать Current и Selected? Отправлено: break от Февраль 15, 2010, 17:53 Цитировать А как можно в чекбоксе хранить, на какой он строке стоит? Использовать динамические проперти QObject |