События в QTableWidget, Как определить код клавиши в currentCellChanged? |
Здравствуйте, гость ( Вход | Регистрация )
События в QTableWidget, Как определить код клавиши в currentCellChanged? |
aviabunin |
2.10.2011, 4:40
Сообщение
#1
|
Студент Группа: Участник Сообщений: 26 Регистрация: 31.7.2011 Пользователь №: 2773 Спасибо сказали: 0 раз(а) Репутация: 0 |
Задача - при навигации по таблице с помощью стрелок в зависимости от нажатой клавиши нужно выполнить определенные действия.
Хотелось бы ловить событие типа keyPressEvent(QKeyEvent), но не вижу как его установить для таблицы. Поэтому использую следующее
Но как определить код нажатой клавиши? Спасибо за любую подсказку или ссылку. P.S. Обработчик сейчас такой
|
|
|
maint |
2.10.2011, 6:26
Сообщение
#2
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
я не парю себе мозги. Обрабатываю на головной форме
где ui->view - QTableViev. Сообщение отредактировал maint - 2.10.2011, 6:28 |
|
|
aviabunin |
2.10.2011, 8:15
Сообщение
#3
|
Студент Группа: Участник Сообщений: 26 Регистрация: 31.7.2011 Пользователь №: 2773 Спасибо сказали: 0 раз(а) Репутация: 0 |
Сделал обработку на главной форме, (если я правильно понял):
Но при этом возникли следующие проблемы: 1. Если нажимаешь алфавитные клавиши, то таблица переходит в режим редактирования ячейки Можно ли это предотвратить? Сейчас я просто задействовал F2, f3,f4,f5 для имитации нажатия перемещения вправо, влево и т.п. 2. Хотелось бы сделать чтобы было 2 варианта обработки стрелок, которые переключались бы , например, клавишей табуляции. а. обычное перемещение по таблице б. просто индикация выбранного направления без перемещения. Спасибо! |
|
|
maint |
2.10.2011, 8:30
Сообщение
#4
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
Сделал обработку на главной форме, (если я правильно понял):
Но при этом возникли следующие проблемы: 1. Если нажимаешь алфавитные клавиши, то таблица переходит в режим редактирования ячейки Можно ли это предотвратить? Сейчас я просто задействовал F2, f3,f4,f5 для имитации нажатия перемещения вправо, влево и т.п. 2. Хотелось бы сделать чтобы было 2 варианта обработки стрелок, которые переключались бы , например, клавишей табуляции. а. обычное перемещение по таблице б. просто индикация выбранного направления без перемещения. Спасибо! QWidget::keyPressEvent(event); - вот это я зачем написал ? Это как раз, когда свои случаи не наступили, отдавать стандартному обработчику |
|
|
aviabunin |
2.10.2011, 9:53
Сообщение
#5
|
Студент Группа: Участник Сообщений: 26 Регистрация: 31.7.2011 Пользователь №: 2773 Спасибо сказали: 0 раз(а) Репутация: 0 |
Мне не нужна стандартная обработка - должно быть следующее
1. С помощью стрелок - перемещение по ячейкам. 2. Затем какими-то выбранными алфавитно-цифровыми клавишами - выбор стороны ячейки и затем в режим 1. 3. Лучше, чтобы у стрелок было 2 режима а. стандартное перемещение б. выбор стороны переключение между режимами допустим пробелом. И по пути если можно. Пытаюсь найти как из одного класса mainwindow.cpp передать параметры в другой класс - paintwidget.cpp (он перекрашивает сторону ячейки) ? В главном классе я получаю номер столбца и строки так -
А как передать эти значение в класс рисования
Странно, что width() и height() таблицы, на которой рисую, доступны а currentRow() той же таблицы - не доступна. Собственно, рисую то я не на таблице а на layout, которую растянул на всю таблицу для рисования. А как получить доступ к таблице? Спасибо! |
|
|
maint |
2.10.2011, 10:20
Сообщение
#6
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
перескок в следующую ячейку можно сделать вызовом focusNextChild() в keyEvent. Переключатель режима стрелок только глобальной переменной или переменной определённой в классе. Её и анализировать при обработке нажатия.
Ну а передача параметра совсем просто. Описание в хедере и конструкторе:
Создание:
|
|
|
aviabunin |
2.10.2011, 13:21
Сообщение
#7
|
Студент Группа: Участник Сообщений: 26 Регистрация: 31.7.2011 Пользователь №: 2773 Спасибо сказали: 0 раз(а) Репутация: 0 |
Проблема.
Еще раз задача - перемещаемся по таблице с помощью стрелок. Затем нужно отметить выбранную с помощью специальных (или тех же стрелок в другом режиме) клавиш F3-F6 клавиш перерисовать выбранную сторону в другой цвет. Этот выбор должен сохраняться до конца выполнения программы. Сейчас: На таблице отрисовываю сторону текущей ячейки, но при переходе в следующую ячейку - отрисовка теряется. |
|
|
aviabunin |
2.10.2011, 18:05
Сообщение
#8
|
Студент Группа: Участник Сообщений: 26 Регистрация: 31.7.2011 Пользователь №: 2773 Спасибо сказали: 0 раз(а) Репутация: 0 |
Код во вложении. Алгоритм следующий.
На QTableWidget накладывается layout - на котором рисуется красный отрезок по координатам одной из сторон текущей ячейки таблицы. Перемещение по таблице стандартное с помощью стрелок, выбор стороны для раскраски - в помощью клавиш F3..F6. Выбор и отрисовка сторон нормально, но при переходе в другую ячейку отрисовка сторон теряется. А должна сохраняться. Ищу как это сделать минимумом кода.
Прикрепленные файлы
|
|
|
Litkevich Yuriy |
2.10.2011, 21:17
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 27.4.2024, 2:29 |