LINUX.ORG.RU

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

keyPressEvent

Я пробовал у QWidget - не сработало. Переопределение этого метода у QTextEdit будет работать корректно (в смысле можно ли будет вводить текст с клавиатуры)?

abs ★★★
() автор топика

Если QTextEdit у тебя не переопределялся и вся обработка введенного текста производится в другом классе (например, в виджете, который содержит QTextEdit), то ставишь textEdit->installeventFilter( your_widget ) и переопределяешь метод bool eventFilter(QObject *obj, QEvent *event), где ловишь QEvent::KeyPress.

Только учитывай, есть два Enter'а: Qt::Key_Enter тот что на цифровой клавиатуре и Qt::Key_Return тот что на основной клавиатуре.

grondek
()
Ответ на: комментарий от abs

с чего это не сработало? Проверить какая клавиша нажата, проверить где фокус, выполнить действие. Из своего старого говнокода (это на виджете переопределено, мне лень было создавать отдельный класс под графические элементы):

def keyPressEvent(self, event):
    """delete events"""
    if (event.key() == Qt.Key_Delete):
        if (self.ui.listWidget_customCommand.hasFocus() and
           (self.ui.listWidget_customCommand.currentRow() > -1)):
            self.ui.listWidget_customCommand.takeItem(self.ui.listWidget_customCommand.currentRow())

Переопределение должно работать корректно, если в конце послать этот сигнал опять (только не от наследованного класса), что то типа:

emit(QWidget::keyPressEvent(event));
arcanis ★★★★
()
Последнее исправление: arcanis (всего исправлений: 1)
Ответ на: комментарий от arcanis

с чего это не сработало? Проверить какая клавиша нажата, проверить где фокус, выполнить действие.

Я не знаю, наверное нужен фокус виджету

void Widget::keyPressEvent(QKeyEvent *e){
    qDebug() << e->key();
    if(e->key() == Qt::Key_Enter){
        calculation();
    }
}

Вообще никакая клавиша не проходит.

abs ★★★
() автор топика

Документацию читай.
Или обратно в Java свою уходи.

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

Попробуй Qt::Key_Return

Вообще клавиши не ловатся

abs ★★★
() автор топика

Проблему решил с помощью eventFilter

bool Widget::eventFilter(QObject *object, QEvent *event){
    if (object == textEdit){
        if(event->type() == QEvent::KeyPress){
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
            if (keyEvent->key() == Qt::Key_Return){
                qDebug("Enter Key Pressed...");
                return true;
            }
        }
    }
    return false;
}

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

К тому же для него (TextField) даже не Keys.onPressed нужен, а onAccepted.

anonymous
()
Ответ на: комментарий от alex_custov

Ну какбе, для rich text и многострочности есть TextArea.

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