Russian Qt Forum
Ноябрь 23, 2024, 23:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: почему QTableView может не ловить Qt::Key_Insert?  (Прочитано 10835 раз)
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« : Октябрь 18, 2011, 20:35 »

почему QTableView может не ловить Qt::Key_Insert?

Код:
void uoDbRefTableView::keyPressEvent(QKeyEvent *event)
{
    int key = event->key();
    const QModelIndex idx = currentIndex();
    switch (key){
    case Qt::Key_Delete:   {
        emit onDelElement(currentIndex());
        break;
    }
    case Qt::Key_Insert:    {
        emit onNewElement(currentIndex());
        break;
    }
    case Qt::Key_Enter:
    case Qt::Key_Return:
    {
        emit doubleClicked(idx);
        return;
    }
    case Qt::Key_Plus:{
        if (qApp->keyboardModifiers() & Qt::ControlModifier){
            emit onNewGroup(idx);
        }
            break;
    }
    default:
        break;
    }
    QTableView::keyPressEvent(event);
}
в конструкторе скомандовал дополнительно:
    grabKeyboard();
что еще ему нужно?НепонимающийНепонимающий??
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Bepec
Гость
« Ответ #1 : Октябрь 19, 2011, 07:11 »

Я бы лично посоветовал использовать

Код:
int scancode = pe->nativeScanCode() & 0xFF;

Когда я пытался работать с Qt'шными обозначениями клавиш, то выпадала проблема при переключении на русскую раскладку, и некорректное поведение дублирующих клавиш.

Сделай проще - выведи какой нить нотификатор при каждом нажатии клавиши с меткой аля "клавиша, текст, нативный код, виртуальный код". Проблема решится. (если не ловит, то тогда искать перехватчиков Улыбающийся )

update:

Ступил поутру помоему.

Вопрос: нажатие инсерта не проходит в keyPressEvent?
Или просто не свитчает туда?

UPDATE:

В тестовом примере, через скан коды, клавиша insert ловится.

Пример: пустая форма, наследник от QTableView, и метод
Код:
void table::keyPressEvent(QKeyEvent * pe)
{
int scancode = pe->nativeScanCode() & 0xFF;

             // 82 - скан код insert [10/19/2011 Bepec]
if (scancode == 82)
scancode = 98; // лишь бы было куда ткнуть брекпоинт
}
« Последнее редактирование: Октябрь 19, 2011, 08:11 от Bepec » Записан
Bepec
Гость
« Ответ #2 : Октябрь 19, 2011, 08:12 »

Мысль у меня... Grab ты в каком конструкторе поставил? Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 19, 2011, 09:55 »

в конструкторе скомандовал дополнительно:
    grabKeyboard();
что еще ему нужно?НепонимающийНепонимающий??
Ну это уж слишком... Зачем же так топором да между ног...
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #4 : Октябрь 19, 2011, 10:01 »

Ну уж если одна таблица на весь Main, то почему нет Показает язык
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Октябрь 19, 2011, 10:03 »

Ну уж если одна таблица на весь Main, то почему нет Показает язык
Да потому что так проблемы не решаются  Показает язык
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #6 : Октябрь 19, 2011, 10:57 »

Кстати, если уж реально там 1 виджет, то никакой разницы не будет (он итак будет ловить все нажатия.)
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #7 : Октябрь 19, 2011, 11:47 »

в конструкторе скомандовал дополнительно:
    grabKeyboard();
что еще ему нужно?НепонимающийНепонимающий??
Ну это уж слишком... Зачем же так топором да между ног...
что в нем такого экстремального?
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Октябрь 19, 2011, 12:02 »

что в нем такого экстремального?
В том, что из-за проблем с Insert весь клавиатурный ввод доступен будет только для QTableView. Разве это нормально?
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #9 : Октябрь 19, 2011, 12:02 »

Все нажатия клавы будут идти на TableView.
Если у тебя будет  диалог, форма, доп виджет, поле ввода. То они не получат ни 1 сигнала с клавиатуры Улыбающийся

У меня в проекте есть такая необходимость (Пульт управления), но там на доп формы я снимаю граб releaseKeyboard()'ом. Улыбающийся


PS как там у тя с insert'ом? У меня все нормально ловится и без граба.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #10 : Октябрь 19, 2011, 12:09 »

что в нем такого экстремального?
В том, что из-за проблем с Insert весь клавиатурный ввод доступен будет только для QTableView. Разве это нормально?
нет конечно, я это уже вчера прочуствовал.
убрал грабкейворд.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #11 : Октябрь 19, 2011, 12:20 »

PS как там у тя с insert'ом? У меня все нормально ловится и без граба.
Пофигу ему. Такое впечатление, что нажатие как эвент вообще не приходит в void uoDbRefTableView::keyPressEvent(QKeyEvent *event)
точки останова не срабатывают.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #12 : Октябрь 19, 2011, 12:26 »

PS как там у тя с insert'ом? У меня все нормально ловится и без граба.
Пофигу ему. Такое впечатление, что нажатие как эвент вообще не приходит в void uoDbRefTableView::keyPressEvent(QKeyEvent *event)
точки останова не срабатывают.

ловится только комбинация:
Код:
    case Qt::Key_Insert:    {
        //if (qApp->keyboardModifiers() & Qt::NoModifier)
        if (qApp->keyboardModifiers() & Qt::ControlModifier)
            emit onNewElement(currentIndex());
        break;
    }
те Ctrl+Ins
Вернее только она приходит, чистый туда не ходит..
« Последнее редактирование: Октябрь 19, 2011, 12:33 от panAlexey » Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Bepec
Гость
« Ответ #13 : Октябрь 19, 2011, 12:40 »

Я ж те советовал в скан коде позырить, вообще 82 код приходит или нет. В keyPressEvent всмысле.

И такое чуйство что у тебя какой то элемент его перехватывает на себя. То ли кнопка, то ли меню.

PS как вариант попытаться Insert поймать у формы своей.

А в идеале бы выложил проектик свой, я б покопался Улыбающийся Потому что у меня на чистом Table работает, значит проблема в компонентах.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #14 : Октябрь 19, 2011, 12:43 »

Я ж те советовал в скан коде позырить, вообще 82 код приходит или нет. В keyPressEvent всмысле.
Не приходит, уже проверил.
ссылка на проект
« Последнее редактирование: Октябрь 19, 2011, 13:04 от panAlexey » Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.149 секунд. Запросов: 23.