if (ui->lineEdit_input->hasFocus()){
ui->lineEdit_input->backspace();}
else if (ui->lineEdit_input_X->hasFocus())
ui->lineEdit_input_X->backspace();
}
поле 1 и поле 2 типа LineEdit.
на полях настроено focusPolicy(ClickFocus)
Если я ввожу в поле 1 значения потом нажимаю "CE" все корректно отрабатывает, удаляется последний введенный символ. Если после ввода значений в поле 1 я переключаюсь на поле 2 затем опять на поле 1 то при нажатии "CE" ничего не происходит, т.е. не удаляются символы из строки. В чем ошибка?
ну разберись поэтапно посмотри сначала, где фокус на самом деле, пока без особых заморочек в начале метода qDebug()<<ui->lineEdit_input->hasFocus()<<ui->lineEdit_input_X->hasFocus();
я проверял это с помощью QWidget * widgetName = qApp->focusWidget(); qDebug () << widgetName->objectName(); сейчас еще раз попробую
ну значит тебе надо переместить курсор в позицию иную от 0 в lineEdit If no text is selected, deletes the character to the left of the text cursor and moves the cursor one position to the left когда ты тыкаешь в твой LineEdit, посмотри куда именно курсор устанавливается
Можно попробовать так: void MainWindow::CE_clicked() { QLineEdit *line = nullptr; if (ui->lineEdit_input->hasFocus()) { line = ui->lineEdit_input;} else if (ui->lineEdit_input_X->hasFocus()) { line = ui->lineEdit_input_X;} if(!line) return; line->setCursorPosition(line->text().length()); line->backspace(); }
я понял фишку с курсором, спасибо, вопрос теперь как автоматически выставлять его на последний символ строки, в примере "123" ставим после тройки.
Выше ответ, попробуй
а надо? lineEdit->setText(lineEdit->text().chop(1)) типа такого... чем не устраивает?
ну или смотри QLieEdit::setCursorPosition(int) так кажется метод зовется
помогло, большое спасибо, в самом начале я поставил запрет на ввод с клавиатуры. ui->lineEdit_input->setFocus(); ui->lineEdit_input->setReadOnly(true); после этого при переключении между окнами CursorPosition не учитывал, по умолчанию он равен 0, в этом и была ошибка.
Обсуждают сегодня