Russian Qt Forum
Ноябрь 25, 2024, 03:20
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Как синхронизировать Current и Selected?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как синхронизировать Current и Selected? (Прочитано 3828 раз)
fulkabaster
Гость
Как синхронизировать Current и Selected?
«
:
Февраль 14, 2010, 13:56 »
Например, создаю QTableWidget. ставлю у нее свойства:
selectionMode = SingleSelection
selectionBehaveour = SelectRows
Таблицу заполняю объектами QTableWidgetItem, кроме первого столбца, его заполняю чек-боксами QCheckBox.
В итоге если я кликаю по любой ячеке не в первом стобце, то выделяется соответствующая строка, в которой сидит эта ячейка. Но если кликаю чекбоксы, то их строка не выделяется, хотя сам чек-бокс обводится фокус-квадратиком, т.е. он становится текущим виджитом. При заполнении ячеек флаги оставляю по умолчанию (isSelectable, isEditable и т.п.).
Как сделать, чтобы строка выделялась и при клике на чекбоксах?
«
Последнее редактирование: Февраль 14, 2010, 17:01 от fulkabaster
»
Записан
fulkabaster
Гость
Re: Как синхронизировать Current и Selected?
«
Ответ #1 :
Февраль 14, 2010, 18:06 »
И еще вдогонку. Не могу разобраться с некоторыми вещами относительно вставки любого виджета в ячейку.
Вот, в другой столбец мне нужно вставлять QSpinBox-ы. Вставил. При изменении значения в спин-боксе, должно измениться содержание другой ячейки, находящейся в той же строке, что и затронутый спин-бокс. Для этого соединил сигнал таблицы cellChanged(int row, int column) со своим нужным слотом, где меняю содержимое той ячейки. Но вот только этот сигнал не испускается, если в ячейке находится не QTableWidgetItem, а QSpinBox. Понятно, что можно создавать массив указателей на спин-боксы и соединять ихсигналы valueChanged() с моим слотом, но почему не работает cellChanged?
И еще - а как выравнять виджит (тот же чек-бокс) в ячейке по горизонтали?
Записан
BRE
Гость
Re: Как синхронизировать Current и Selected?
«
Ответ #2 :
Февраль 14, 2010, 18:11 »
Почитай про модели и делегаты.
Думаю большинство вопросов сразу отпадет.
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: Как синхронизировать Current и Selected?
«
Ответ #3 :
Февраль 14, 2010, 21:26 »
Цитировать
Но если кликаю чекбоксы, то их строка не выделяется
Скорее всего даже выделяется но просто чекбокс как самостоятельный виджет рисуется поверх и уже никакого выделения не видно - попробуй сделать чтобы чекбокс занимал не всю ячейка - для проверки...
Читать про модели вас отправили правильно
А сигнал не испускался т.к. менялось состояние чекбокса а не итема в таблице.
Можно сконнектить каждый чекбокс со своей ячейкой. Или сконнектить все чекбоксы со своим слотом - но все это изврат...
Модель + Делегаты предоставят более элегентное решение.
Записан
fulkabaster
Гость
Re: Как синхронизировать Current и Selected?
«
Ответ #4 :
Февраль 15, 2010, 09:26 »
Цитата: break от Февраль 14, 2010, 21:26
Цитировать
Но если кликаю чекбоксы, то их строка не выделяется
Скорее всего даже выделяется но просто чекбокс как самостоятельный виджет рисуется поверх и уже никакого выделения не видно - попробуй сделать чтобы чекбокс занимал не всю ячейка - для проверки...
Не выделяется, так как я поставил в свойствах выделение целой строки, а не одной ячейки (см. в первом посте), а при щелкании чекбокса выделенной остается прежняя строка.
Насчет моделей/делегатов я глянул в описание и книгу Бланшет, везде указано, что они оправданы при работе с большим количеством данных. В моем случае как раз данных мало - от нескольких единици до нескольких десятков строк. Но если это решит указанные мной проблемы, то правильно ли я понимаю, что нужно использовать не QTableWidget, а QTableView?
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: Как синхронизировать Current и Selected?
«
Ответ #5 :
Февраль 15, 2010, 14:09 »
Цитировать
Не выделяется, так как я поставил в свойствах выделение целой строки, а не одной ячейки (см. в первом посте), а при щелкании чекбокса выделенной остается прежняя строка.
Значит действительно не выделяется т.к. указатель мышки не попадает в ячейку - а попадает на сам виджет checkbox. Опять же рповеряется увеличив размеры ячеек так чтобы чекбокс не занимал всю ее.
Цитировать
нужно использовать не QTableWidget, а QTableView?
Правильно. И дело не только в больших объемах данные - делая на основе разделенных Модели-Представления вы будете использовать более правильную концепцию, кот. позволит избежать некоторых других проблем в будующем.
А вообще можно и с TableWidget победить - когда чекбокс получает фокус выделять строку. Правда прийдется либо в чекбоксах хранить на какой строке он стоит - либо привязаться жестко к первой строке (вроде они у вас только там).
Проверил у себя - если виджет не будет занимать всю ячейку и клукать в саму ячейку то все работает - так что дело в этом!
«
Последнее редактирование: Февраль 15, 2010, 14:19 от break
»
Записан
fulkabaster
Гость
Re: Как синхронизировать Current и Selected?
«
Ответ #6 :
Февраль 15, 2010, 15:40 »
Но это не решает мою проблему, хочется чтобы строка выделялась не только тогда, когда юзер попадает мимо чекбокса, но и когда щелкает по нему
Цитировать
Правда прийдется либо в чекбоксах хранить на какой строке он стоит - либо привязаться жестко к первой строке (вроде они у вас только там).
Если бы в строке
Чекбоксы в первом столбце. А как можно в чекбоксе хранить, на какой он строке стоит? Это бы решило проблему.
Еще я заметил, что среди флагов у QTableWidgetItem имеется IsCheckable. При этом по умолчанию он включен. Как это понимать? Ведь если втсавить QTableWidgetItem в таблицу - никаких галочек там никуда не поставить.
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: Как синхронизировать Current и Selected?
«
Ответ #7 :
Февраль 15, 2010, 17:53 »
Цитировать
А как можно в чекбоксе хранить, на какой он строке стоит?
Использовать динамические проперти QObject
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...