Название: QTableWidget и управление поведением выделения Отправлено: UndeadDragon от Январь 24, 2013, 14:45 Привет всем! Мне нужно, чтобы стандартная таблица поддерживала выделения, но не давала пользователю их изменять. В идеале вообще, чтобы ничего нельзя было делать мышкой, кроме того, что я определю.
Долго ковырялся, пробовал eventFilter, но с ним ничего не получилось, 0 реакции. Тогда я попробовал рассоеденить все сигнал-слоты модели выделения: Код: QItemSelectionModel *selectionModel = mainTable->selectionModel(); Вопрос таков, как запретить все же все эти действия с выделением и как реализовать определение, по какой именно ячейке\строке тыкнул пользователь? Название: Re: QTableWidget и управление поведением выделения Отправлено: Bepec от Январь 24, 2013, 14:50 Сумбурно, чего хочешь непонятно.
PS формулируй лучше, а ещё лучше рисуй рисунки. В прошлой твоей теме это здорово помогло, если не изменяет мне память. Название: Re: QTableWidget и управление поведением выделения Отправлено: Пантер от Январь 24, 2013, 14:52 Не пробовал отнаследоваться от QItemSelectionModel и установить ее для вьюхи?
Название: Re: QTableWidget и управление поведением выделения Отправлено: UndeadDragon от Январь 24, 2013, 15:16 Сумбурно, чего хочешь непонятно. Да я уж постарался, что-то не вышло, раз не понял)PS формулируй лучше, а ещё лучше рисуй рисунки. В прошлой твоей теме это здорово помогло, если не изменяет мне память. Ну для начала давай разберемся, как бы запретить вообще что-либо в таблице менять мышкой, в том числе выделение. Выделением нужно управлять программе, пользователю нет. Как я сказал, после полного дисконнекта у QItemSelectionModel в таблице перестало изменятся выделение по клику мышкой, но оно все еще изменяется, если зажать мышь и поводить ею. Я не совсем понимаю кто за это ответственен и как идет этот процесс, потому, что евенты с мышкой не ловятся, а сигналы все у QItemSelectionModel отключены. Не пробовал отнаследоваться от QItemSelectionModel и установить ее для вьюхи? Не уверен, что тут нужно новый класс создавать, да и плохо пока понимаю, как работает QItemSelectionModel.Название: Re: QTableWidget и управление поведением выделения Отправлено: Bepec от Январь 24, 2013, 15:28 Полностью запретить выделение пользователю? Хех. Достойная мысль, только зачем?
Правильно тебе Пантер советует - отнаследуйся. Название: Re: QTableWidget и управление поведением выделения Отправлено: UndeadDragon от Январь 24, 2013, 20:27 Полностью запретить выделение пользователю? Хех. Достойная мысль, только зачем? Отнаследоваться и переопределить что? Я не знаю как работает этот класс для выделения.Правильно тебе Пантер советует - отнаследуйся. Ну, мне просто нужно выводить информацию в табличном виде, выделяя важную. Для этого надо, естественно, чтобы пользователь не мог скинуть выделение тыкнув где-то там мышкой. Просто есть же ивент фильтры и дисконнекты, чтобы избежать излишнего наследования, а тут прям тупик. Название: Re: QTableWidget и управление поведением выделения Отправлено: _OLEGator_ от Январь 24, 2013, 22:15 Выделять нужную информацию надо не так, стандартный механизм выделения немного для другого предназначен. Для выделения нужной и любой другой информацию лучше писать своего делегата у вьювера.
Название: Re: QTableWidget и управление поведением выделения Отправлено: UndeadDragon от Январь 25, 2013, 00:23 Выделять нужную информацию надо не так, стандартный механизм выделения немного для другого предназначен. Для выделения нужной и любой другой информацию лучше писать своего делегата у вьювера. И что мне в делигат запихать? QLabel?Просто мне очень подходило по виду выделение, казалось переделать его поведение будет легко. QLabel будет уже не совсем так смотреться. Хотя, конечно, в крайнем случае подойдет. Название: Re: QTableWidget и управление поведением выделения Отправлено: denka от Январь 25, 2013, 01:22 setSelectionMode(QAbstractItemView::NoSelection) не оно?
Название: Re: QTableWidget и управление поведением выделения Отправлено: UndeadDragon от Январь 25, 2013, 01:36 setSelectionMode(QAbstractItemView::NoSelection) не оно? Пробовал, но тогда вообще отключается выделение))Название: Re: QTableWidget и управление поведением выделения Отправлено: denka от Январь 25, 2013, 01:45 Ну так ты выделение программно вроде собрался делать, setRangeSelected вроде никто не отменял.
Название: Re: QTableWidget и управление поведением выделения Отправлено: UndeadDragon от Январь 25, 2013, 01:59 Ну так ты выделение программно вроде собрался делать, setRangeSelected вроде никто не отменял. После того флага оно вообще не отображается :)Всем спасибо, решил обойтись проще, методом QTableWidgetITem::setBarckground, в общем и целом устраивает и меньше ресурсов выжрет, чем делегатов пихать. Еще убрал оставшийся пунктирный прямоугольник вокруг тыкнутой ячейки, если кому надо Код: setFocusPolicy(Qt::NoFocus); Название: Re: QTableWidget и управление поведением выделения Отправлено: _OLEGator_ от Январь 25, 2013, 09:26 Всем спасибо, решил обойтись проще, методом QTableWidgetITem::setBarckground, в общем и целом устраивает и меньше ресурсов выжрет, чем делегатов пихать. Как вариант и это подойдет, я имел в виду делегат QTableView, который один на всю таблицу устанавливается: Код
|