![]() |
|
![]() ![]() ![]() |
|
qasker |
|
||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2013 Репутация: нет Всего: нет |
На форме есть виджеты QLabel, QTableWidget.
По нажатию правой кнопки мыши требуется всплывающее меню - свое для каждого виджета. Но в меню для label должен быть пункт типа "Копировать влево Ctrl+C", а в меню для table - "Копировать вправо Ctrl+C". Ключевое здесь - сочетания клавиш для обоих пунктов одинаковые. Т.е. нажатие Ctrl+C должно вызывать действие из "своего" меню (находящегося в фокусе). Меню реализовал, при выборе пунктов меню мышкой происходит то, что нужно. А вот сочетание клавиш не работает, если QShortcut Ctrl+C установлен обоим виджетам. Если какому-то одному - то работает. Как-то проблема решается? Элементарная же вещь. Хотя бы общая идея. В Builder все парой кликов в редакторе форм решалось... Неужели отлавливать нажатия клавиш отдельно, узнавать, над каким виджетом курсор? 0-: Qt версия 4.8. .h :
.cpp:
|
||||
|
|||||
Jeka178RUS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 3.9.2012 Репутация: нет Всего: нет |
Может это поможет http://qt-project.org/doc/qt-4.8/qaction.h...cutContext-prop
|
|||
|
||||
qasker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2013 Репутация: нет Всего: нет |
Да, помогло, отчасти.
Но вызывается в итоге все равно do1(); В ней конечно можно получить имя виджета и если надо, вызывать do2(); Но как-то сложно и некраиво... А еще, что грустнее, при table не enabled() сочетание Ctrl+C не срабатывает на lable :( Что логично, ведь при текущих раскладах подконнекчена только do1()... Это сообщение отредактировал(а) qasker - 23.4.2013, 13:50 |
|||
|
||||
Jeka178RUS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 3.9.2012 Репутация: нет Всего: нет |
Пробовал Qt::WidgetWithChildrenShortcut?
|
|||
|
||||
qasker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2013 Репутация: нет Всего: нет |
Попробовал, то же самое.
Не понимаю, я указал в конструкторах шорткатов конкретные виджеты. А do1() вызывается и при нажатии сочетания клавиш и с курсором поверх других виджетов. Эх, наверно надо делать глобальный шорткат и в его обрботчике определять виджет. |
|||
|
||||
Jeka178RUS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 3.9.2012 Репутация: нет Всего: нет |
То что курсор поверх виджета еще не значит что у него фокус
![]() |
|||
|
||||
qasker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2013 Репутация: нет Всего: нет |
Да, когда кликнул в ячейку таблицы, перенести из нее фокус, кликая на label, не получается.
Сделал "узнвание", где курсор:
![]() ![]() P.S. В QT начал работать недавно, пока из-за неопытности вот бесят все эти костыли жуткие. Может, всё делается проще, но например у Шлее такой заковыки вроде не было. |
|||
|
||||
Jeka178RUS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 3.9.2012 Репутация: нет Всего: нет |
Я думаю тебе стоит почитать про focusPolicy :^) Ибо я подозреваю QLabel не принимает фокус вообще, если его не научить
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, 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. |