![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Litkevich Yuriy |
![]()
Сообщение
#11
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Да, передается. стало быть всё фильтруется.собственно весь код, который в условии - неверен. 1) вместо static_cast, если нет объективной причины, для классов-наследников QObject используй qobject_cast; 2) зачем ты создаёшь событие? 3) почему ты переопределяешь событие, мало того ещё и не удалив оригинальное (нет delete kv) - утечка памяти; 4) почему "обработав" событие функция возвращает false? Яже писал: Поймав нажатие клавиши с русской буквой "Щ" (Qt::Key_O), ты вводишь в виджет латинскую букву "O", а возвращаешся из обработчика события со значением Истина (событие обработано и дальше его передавать не надо) |
|
|
Trisch |
![]()
Сообщение
#12
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
пытался заменить static_cast на qobject_cast. компилятор пишет что нет соответствия для вызова данной функции.
QKeyEvent *kv создается для того чтобы я мог узнать какая клавиша нажата, так как у QEvent нет функции key(). false всегда вызывается потому, что мне показалось, что так будет проще, так как я поменял оригинальное событие на мне нужное и послал его дальше обрабатываться, то-есть мне не надо вручную вставлять нужные мне символы в QLineEdit. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Я про это создание спрашивал:
QKeyEvent ke = QKeyEvent(QEvent::KeyPress, kv->nativeVirtualKey(), вот создал ты его на стеке. указатель на него присвоил указателю на оригинальное событие (оно повисло в воздухе, за ним никто не следит - утечка памяти). Qt::NoModifier, QChar(Qt::Key_0)); Затем вышел за область видимости, объект ke уничтожился, теперь указатель kv указывает на "мёртвую" область памяти, что там дальше произойдёт - Х.З. |
|
|
Trisch |
![]()
Сообщение
#14
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
Я про это создание спрашивал: QKeyEvent ke = QKeyEvent(QEvent::KeyPress, kv->nativeVirtualKey(), вот создал ты его на стеке. указатель на него присвоил указателю на оригинальное событие (оно повисло в воздухе, за ним никто не следит - утечка памяти). Qt::NoModifier, QChar(Qt::Key_0)); Затем вышел за область видимости, объект ke уничтожился, теперь указатель kv указывает на "мёртвую" область памяти, что там дальше произойдёт - Х.З. не понял ![]() разве такой синтаксис "*kv = ke;" не означает, что мы присваиваем значение ke области памяти, адресуемой указателем kv? То-есть значение по указателю kv должно существовать в независимости от того существует еще объект ke или нет? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
То-есть значение по указателю kv должно существовать в независимости от того существует еще объект ke или нет? в принципе да, т.к. QEvent явно не определяет конструктор копирования и оператор присваивания, то произойдёт побитовое копирование. Но, т.к. у него внутри есть QEventPrivate, то ХЗ чем это всё кончится.Для QObject, например этот трюк не пройдёт, т.к. у него явно конструктор копирования и оператор присваивания находятся в секции private, чтобы предотвратить чудеса. Вобще мне непонятна цель столь не логичной с точки зрения ООП манипуляции. пытался заменить static_cast на qobject_cast. компилятор пишет что нет соответствия для вызова данной функции. да, тут я ошибся. Я забыл что QEvent не является наследником QObject.Извиняюсь. |
|
|
Trisch |
![]()
Сообщение
#16
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
Я, пока что, реши проблему через QKeyEvent::text(). Но этот вариант как минимум плох тем, что рассчитан под определенную раскладку(
Вот почему методом QKeyEvent::key() не получается четко определить какая клавиша нажата(как писалось уже выше). Может это проблема ток с Qt 5? Или надо воспользоваться еще какими либо методами? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Trisch |
![]()
Сообщение
#18
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
Вот почему методом QKeyEvent::key() не получается четко определить какая клавиша нажата(как писалось уже выше) а что именно не так? (я не увидел ни какой конкретики по этому поводу)То был вопрос. Просто забыл знак вопроса поставить. Дело в том что QKeyEvent::key() в разных раскладках возвращает разные значения. к примеру в Английской возвращает 45, в русской при нажатии той же клавиши 1026, а в украинской уже 1057 (в данном случая цифры взяты с потолка) |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 20.6.2025, 1:54 |