LINUX.ORG.RU

Ответ на: комментарий от UVV

И что я в keyPressEvent само должно понимать кому нужно запендюрить нужный QShortcutEvent? А где взять правильный ShortcudId для QAction?

И кто вообще должен формировать эти самые события и как его заставить это делать если в фокусе QPlainTextEvent? Ведь блин не формируются события QShortcutEvent только для предопределенных сочетаний, те что predefined keybindings и если просто переопределить keyPressEvent и keyReleaseEvent (сие события ВСЕГДА идут в паре, угадайте почему), то никто Вам эти самые QShortcutEventы не сформирует и ничего работать не будет. Так как сделать так чтобы события к shortcutам генерировались шататно (и как это? )?

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

Просто переопредели keyPressEvent(), в нём проверь, не Ctrl-V ли пришло. Если оно, то return, иначе QPlainTextEdit::keyPressEvent(event);

Если надо поменять хоткей, то в своём keyPressEvent() проверяешь на свой хоткей, и если это он, то вызываешь QPlainTextEdit::keyPressEvent() с другим событием, в котором дефолтный хоткей.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

Еще раз для тех кто в танке: ТАК НЕ РАБОТАЕТ! QAction/QShortcut реагируют не QShortcutEvent которое в предложенном вами методе сгенерировано не будет. Не надо априори всех вокруг считать идиотами, некоторые прежде чем спрашивать очевидные вещи проверили.

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

Еще раз для тех кто в танке...

Я честно два раза перечитал твоё предыдущие сообщение и ничешуя не понял. Научись для начала выражаться хотя бы по-русски или по-английски.

UVV ★★★★★
()
Ответ на: комментарий от mskmsk1985

ТАК НЕ РАБОТАЕТ!

Ох не звизди.

void MyTextEdit::keyPressEvent(QKeyEvent *e)
{
   int key = e->key();
   if (!(e->modifiers() & (Qt::ControlModifier ) &&
       (key == Qt::Key_V ))) {
      QPlainTextEdit::keyPressEvent(e);
   }
}

UVV ★★★★★
()
Ответ на: комментарий от UVV

Вы прикидываетесь или как?

Создате QAction с shortcut равным QKeySequence::Paste и попробуте сделать так чтобы слот присоединенный к triggered сигналу этого QAction был вызван. Когда у Вас сие получиться приходите рассказывать как это у Вас получилось.

ЗЫ: Идите подучитесь, чтобы небыло проблем с восприятием мыслей окружающих.

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

У меня проблем с восприятием нет никаких, а у тебя есть проблемы с мыслеизложением.
Изначальный вопрос был «как игнорировать определённые клавиши?», тебе на этот вопрос ответили, и я предоставил работающий код. Ты по какой-то неведомой мне пока причине всё-таки хочешь выстрелить себе в ногу и таки отказываешься рассказывать ту задачу, которую тебе надо решить.
Может стоить подойти к решению проблемы с другой стороны и сделать QAction'у disable?

UVV ★★★★★
()
Ответ на: комментарий от UVV

Пожалуйста по пунктам: 1 - Есть окно с QPlainTextEdit - это единственный виджет 2 - Есть QAction с shortcut равным QKeySequence::Paste 3 - Этот QAction ассоциирован с пунктом контекстного меню QPlainTextEdit через addAction и setContextMenuPolicy(Qt::ActionsContextMenu). Задача: при нажатии комбинации равной QKeySequence::Paste должен вызываться слот соединенный с сигналом triggered() вышеозвученного QAction. Проблема: QPlainTextEdit съедает некоторые комбинации кнопок, и соответствующие этим комбинациям QAction/QShortcut не срабатывают. Как вылечить? Теперь внятно изложил?

ЗЫ: Продемонстрированный отрывок кода не решает эту проблему, он вообще ниочем, догадываетесь почему?

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

Нет, не догадываюсь.
1. Берёшь мой фрагмент и в else подставляешь свой слот.
2. Переопределение стандартных сочетаний клавиш не является хорошим стилем приложения.

UVV ★★★★★
()
Ответ на: комментарий от UVV

1 - Обрабатывать сочетания клавиш и вызывать слоты должны соответствующие QAction (иначе нах они нужны), в этом и задача реализовать штатный для Qt метод работы с shortcut а не городить велик с вашим «кодом» (эта простите дешёвая заплатка достойная студентов, а не серьезных проектов). 2 - Как ни странно по QKeySequence::Paste я собираюсь делать именно то что от меня ожидают - вставлять текст из буфера обмена, но мне его еще причесать кое как надо, так что штатная вставка QPlainTextEdit не подходит.

mskmsk1985
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.