Название: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 18, 2011, 20:35 почему QTableView может не ловить Qt::Key_Insert?
Код: void uoDbRefTableView::keyPressEvent(QKeyEvent *event) grabKeyboard(); что еще ему нужно????????? Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: Bepec от Октябрь 19, 2011, 07:11 Я бы лично посоветовал использовать
Код: int scancode = pe->nativeScanCode() & 0xFF; Когда я пытался работать с Qt'шными обозначениями клавиш, то выпадала проблема при переключении на русскую раскладку, и некорректное поведение дублирующих клавиш. Сделай проще - выведи какой нить нотификатор при каждом нажатии клавиши с меткой аля "клавиша, текст, нативный код, виртуальный код". Проблема решится. (если не ловит, то тогда искать перехватчиков :) ) update: Ступил поутру помоему. Вопрос: нажатие инсерта не проходит в keyPressEvent? Или просто не свитчает туда? UPDATE: В тестовом примере, через скан коды, клавиша insert ловится. Пример: пустая форма, наследник от QTableView, и метод Код: void table::keyPressEvent(QKeyEvent * pe) Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: Bepec от Октябрь 19, 2011, 08:12 Мысль у меня... Grab ты в каком конструкторе поставил? :)
Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: GreatSnake от Октябрь 19, 2011, 09:55 в конструкторе скомандовал дополнительно: Ну это уж слишком... Зачем же так топором да между ног...grabKeyboard(); что еще ему нужно????????? Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: Bepec от Октябрь 19, 2011, 10:01 Ну уж если одна таблица на весь Main, то почему нет :P
Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: GreatSnake от Октябрь 19, 2011, 10:03 Ну уж если одна таблица на весь Main, то почему нет :P Да потому что так проблемы не решаются :PНазвание: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: Bepec от Октябрь 19, 2011, 10:57 Кстати, если уж реально там 1 виджет, то никакой разницы не будет (он итак будет ловить все нажатия.)
Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 19, 2011, 11:47 в конструкторе скомандовал дополнительно: Ну это уж слишком... Зачем же так топором да между ног...grabKeyboard(); что еще ему нужно????????? Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: GreatSnake от Октябрь 19, 2011, 12:02 что в нем такого экстремального? В том, что из-за проблем с Insert весь клавиатурный ввод доступен будет только для QTableView. Разве это нормально?Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: Bepec от Октябрь 19, 2011, 12:02 Все нажатия клавы будут идти на TableView.
Если у тебя будет диалог, форма, доп виджет, поле ввода. То они не получат ни 1 сигнала с клавиатуры :) У меня в проекте есть такая необходимость (Пульт управления), но там на доп формы я снимаю граб releaseKeyboard()'ом. :) PS как там у тя с insert'ом? У меня все нормально ловится и без граба. Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 19, 2011, 12:09 что в нем такого экстремального? В том, что из-за проблем с Insert весь клавиатурный ввод доступен будет только для QTableView. Разве это нормально?убрал грабкейворд. Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 19, 2011, 12:20 PS как там у тя с insert'ом? У меня все нормально ловится и без граба. Пофигу ему. Такое впечатление, что нажатие как эвент вообще не приходит в void uoDbRefTableView::keyPressEvent(QKeyEvent *event)точки останова не срабатывают. Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 19, 2011, 12:26 PS как там у тя с insert'ом? У меня все нормально ловится и без граба. Пофигу ему. Такое впечатление, что нажатие как эвент вообще не приходит в void uoDbRefTableView::keyPressEvent(QKeyEvent *event)точки останова не срабатывают. ловится только комбинация: Код: case Qt::Key_Insert: { Вернее только она приходит, чистый туда не ходит.. Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: Bepec от Октябрь 19, 2011, 12:40 Я ж те советовал в скан коде позырить, вообще 82 код приходит или нет. В keyPressEvent всмысле.
И такое чуйство что у тебя какой то элемент его перехватывает на себя. То ли кнопка, то ли меню. PS как вариант попытаться Insert поймать у формы своей. А в идеале бы выложил проектик свой, я б покопался :) Потому что у меня на чистом Table работает, значит проблема в компонентах. Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 19, 2011, 12:43 Я ж те советовал в скан коде позырить, вообще 82 код приходит или нет. В keyPressEvent всмысле. Не приходит, уже проверил.ссылка на проект (http://unnstudioreport.googlecode.com/files/uodbmanager.rar) Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: GreatSnake от Октябрь 19, 2011, 13:02 Вот работающий пример:
Код С Insert никаких проблем нет. Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 19, 2011, 13:07 Вот работающий пример: У меня тоже нет. В смысле скомпильнул, попробовал - нет проблем.С Insert никаких проблем нет. Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 19, 2011, 13:08 Я ж те советовал в скан коде позырить, вообще 82 код приходит или нет. В keyPressEvent всмысле. Не приходит, уже проверил.Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: kambala от Октябрь 19, 2011, 14:15 а оператор and в 11 ввели? а то пришлось заменять его на && чтоб проект собрался.
твоя проблема в том, что у тебя инсерт висит на actionNewElement в качестве хоткея - он и перехватывает нажатие. Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: Bepec от Октябрь 19, 2011, 15:20 Вот вот, я тоже так думал :)
Вот только проект не захотел запускаться - версии dll'ok его не устроили ) Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: panAlexey от Октябрь 19, 2011, 20:19 твоя проблема в том, что у тебя инсерт висит на actionNewElement в качестве хоткея - он и перехватывает нажатие. О, спасибо. а я и забыл про эту пиктограмму, к гую хотел потом вернуться - больше дел в других местах было...Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: iroln от Октябрь 19, 2011, 22:17 Bepec
А я бы хотел уточнить по поводу nativeScanCode. Просто тут тоже возникла проблема. Написал программку на PyQt. Собрал её с помощью cx_Freeze в бинарник. Запускаю у себя на машине (Windows 7 ENG), хоткеи работают при любой раскладке, запускаю на целевой машине (там Windows 7 RUS), хоткеи отваливаются на русской раскладке (прямо как в GTK+ программах). Я вот теперь сижу туплю, то ли это проблема появилась при сборке, то ли изначально в Qt сидит. Думаю, попробовать нативные коды, но это ж надо всё переписывать, а у меня там не один обработчик keyEvent. У вас подобная проблема с хоткеями и раскладками была? Название: Re: почему QTableView может не ловить Qt::Key_Insert? Отправлено: Bepec от Октябрь 20, 2011, 07:05 Я ж писал, если использовать Qt::клавиша "какая-то", то на русских версиях ОС оно будет игнорировать русскую раскладку. Вообще.
Нативные же коды не меняются (стандарт они.) Разве что для мультимедийных клавиш могут изменяться. Потому я уже давно енумчик со скан кодами делаю на такой случай. То же самое получается, только не зависит от версии ОС и прочая :) |