Название: Обработка нажатия клавиш в QTableWidget Отправлено: aviabunin от Октября 02, 2011, 05:11 Задача - при навигации по таблице с помощью стрелок в зависимости от нажатой клавиши нужно выполнить определенные действия.
Хотелось бы ловить событие типа keyPressEvent(QKeyEvent), но не вижу как его установить для таблицы. Поэтому использую следующее Код: QObject::connect(ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(MyEventHandler())); Спасибо за любую подсказку или ссылку. P.S. Обработчик сейчас такой Код: void MainWindow::MyEventHandler() Название: Re: Обработка нажатия клавиш в QTableWidget Отправлено: aviabunin от Октября 02, 2011, 08:09 Сделал обработку нажатия клавиши на главной форме :
Код: void MainWindow::keyPressEvent(QKeyEvent *e) 1. Если нажимаешь алфавитные клавиши, то таблица переходит в режим редактирования ячейки Можно ли это предотвратить? Сейчас я просто задействовал F2, f3,f4,f5 для имитации нажатия перемещения вправо, влево и т.п. 2. Хотелось бы сделать чтобы было 2 варианта обработки стрелок, которые переключались бы , например, клавишей табуляции. а. обычное перемещение по таблице б. просто индикация выбранного направления без перемещения. Спасибо! Название: Re: Обработка нажатия клавиш в QTableWidget Отправлено: kambala от Октября 02, 2011, 12:07 унаследуйся от QTableWidget и переопредели keyPressEvent
Название: Re: Обработка нажатия клавиш в QTableWidget Отправлено: aviabunin от Октября 02, 2011, 13:19 Проблема.
Еще раз задача - перемещаемся по таблице с помощью стрелок. Затем нужно отметить выбранную с помощью специальных (или тех же стрелок в другом режиме) клавиш F3-F6 клавиш перерисовать выбранную сторону в другой цвет. Этот выбор должен сохраняться до конца выполнения программы. Сейчас: На таблице отрисовываю сторону текущей ячейки, но при переходе в следующую ячейку - отрисовка теряется. Т.к. таблица перерисовывается видимо. Как можно исправить ситуацию? Название: Re: Обработка нажатия клавиш в QTableWidget Отправлено: kambala от Октября 02, 2011, 14:05 Код это не должно сбрасываться пока сам не поменяешь фон ячейки. если не поможет, можешь показать код. Название: Re: Обработка нажатия клавиш в QTableWidget Отправлено: aviabunin от Октября 02, 2011, 17:52 Код во вложении.
Где-то увидел, что можно использовать QImage в качестве backbuffer, и рисовать в нем, затем обновлять целиком (http://www.prog.org.ru/topic_13567_0.html) . Но для меня все - новое, хотелось бы найти минимальный путь для начала. Сейчас алгоритм такой: 1. в дизайнере на QTableWidget сверху ложится в тех же размерах layout - на нем рисую отрезки по известным номерам колонки и столбца текущей ячейки. Причем, если перемещение по таблице с помощью стрелок, то пока выбор одной из четырех сторон с помощью клавиш F3 .. F6. Любая сторона отрисовывается, но если уйти с ячейки - затирается. А нужно чтобы отрисовка сторон сохранялась. Спасибо! Название: Re: Обработка нажатия клавиш в QTableWidget Отправлено: kambala от Октября 02, 2011, 18:37 унаследуйся от QTableWidget и переопредели keyPressEvent похоже, эта фраза осталась без внимания.про перерисовку - paintEvent полностью перерисовывает виджет, а не дорисовывает его. если хочешь пользоваться своим способом, то тебе надо добавлять все координаты в какой-то список или множество и отрисовывать его содержимое. но какой-то этот способ не слишком хороший... Название: Re: Обработка нажатия клавиш в QTableWidget Отправлено: aviabunin от Октября 02, 2011, 18:53 Унаследоваться от QTableWidget - вижу и сделаю. Если это решит проблему пропадания отрисованных отрезков - то этим и займусь.
Т.к. ограничения по времени, хотелось увидеть все проблемы. Мне показалась главная сейчас - перерисовка виджета. Хранить все отрезки - возможно, но хотелось попробовать найти другие пути. Возможен путь - рисовать на QImage - и затем как-то перерисовывать на layout, т.е. использовать специальный буфер, где копить изображение - а затем отрисовываеть его на layout. Для меня это задача не простая, надеюсь, что кто-то подскажет или ссылку даст. Название: Re: Обработка нажатия клавиш в QTableWidget Отправлено: kambala от Октября 02, 2011, 19:17 Если это решит проблему пропадания отрисованных отрезков - то этим и займусь. нет, не решит |