![]() |
|
|
![]()
|
|
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
У меня 2 вопроса:
1. Каким образом можно сделать так, чтобы СРАЗУ по ОДНОКРАТНОМУ клику в ячейке она бы переходила в режим редактирования (то есть режим ввода данных в нее) – по умолчанию сначала надо один раз кликнуть на нужной ячейке (типа выбрать ее), а потом еще раз кликнуть по ней же для перехода в режим ввода данных…. 2. Как можно сделать так, чтобы введенное в ячейку значение считывалось бы (допустим в какую-то переменную) даже без “признака окончания редактирования данных” – это “Enter” после ввода данных в ячейку или клик вне ее – то есть чтобы было достаточно для корректного считывания наличия текста в ячейке (то есть получается что когда ячейка находится еще в режиме редактирования, но это должно быть неважно – допустим, если это значение считывается из ячейки по кнопке, то в переменную должно записаться текущее на момент клика значение из ячейки)…
Для решения второго вопроса я уже перебрал всевозможный стандартные слоты таблицы – cellClicked, cellActivated, cellChanged, cellEntered, cellPressed…, да не один из них мне вроде как не подошел (может я их неверно использую…) – некоторые из них наступают только после описанного мной выше “завершающего ввод данных признака”, а другие вообще непонятно когда наступают… |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
1. Вешай слот на сигнал clicked(), cellClicked() или itemClicked() и вызывай edit()
2. Создай делегата class Delegate : public StyledItemDelegate {} и в Delegate::createEditor() на соотвествующий сигнал созданного редактора например QSpinBox::dataChanged() вешай свой слот и сохраняй данные куда хочешь например QGraphicsItem::setPos() для перемещения его на сцене по горизонтали или вертикали. Это сообщение отредактировал(а) math64 - 4.10.2011, 22:10 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
На первый вопрос: можно сделать проще, вызвать setEditTriggers() для выбора соответсвующего свособа открытия редактора.
|
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
math64: за ответ на первый вопрос спасибо - сделал через setEditTriggers(AbstractItemView::CurrentChanged)
по поводу второго вопроса - дайте пож-та простейший примерчик решения данной задачки, а то я по Вашим словам не совсем все понял... |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Это сообщение отредактировал(а) math64 - 5.10.2011, 21:41 |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
math64 - спасибо, конечно, за предоставленный пример решения вопроса №2, но неужели нельзся его решить как-то попроще? Ваш пример уж больно объемный и сложный - для такой-то вроде несложной задачки...
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Главное в коде:
Если найдёшь более простой способ получить указатель на редактор - используй его. В данном примере можно убрать setEditorData(), setModelData() updateEditorGeomery() - я просто продамонстрировал, что такие методы есть, в некоторых случаях можно в них что-то изменить (это нужно, если стандартный редактор не подходит) Останется только метод createEditor(). (см. пример spinboxdelegate из примеров Qt) Другой способ - создать свою фабрику редакторов (пример coloreditorfactory) Но если зарегистрировать свою фабрику в качестве фабрики по умолчанию, как в этом примере, она будет использоваться во всех списках, таблицах, деревьях, что не всегда нужно. И код получится не намного меньше. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |