Кажется, нет прямого способа выполнить то, что вы хотите. Один из способов сделать выше - обработать QLineEdit
textChanged()
сигнал. Затем вы можете проверить эту строку на свое регулярное выражение с помощью функции QRegExp::exactMatch()
и, если она не соответствует, тогда выведите всплывающую подсказку.
Подключите сигнал ..
...
connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(onTextChanged(QString)));
...
Вот ваш слот идет ..
void MainWindow::onTextChanged(QString text)
{
QRegExp regExp;
regExp.setPattern("[^0-9]*"); // For example I have taken simpler regex..
if(regExp.exactMatch(text))
{
m_correctText = text; // Correct text so far..
QToolTip::hideText();
}
else
{
QPoint point = QPoint(geometry().left() + ui->lineEdit->geometry().left(),
geometry().top() + ui->lineEdit->geometry().bottom());
ui->lineEdit->setText(m_correctText); // Reset previous text..
QToolTip::showText(point,"Cannot enter number..");
}
}
Я получил вашу идею, но было бы две проблемы с этим подходом: 1) Я использую QRegExpValidator, что означает, что я не хочу, чтобы пользователь вводил какую-либо недопустимую строку, используя ваш подход, пользователь может ввести неверный ввод 2) Я не знаю, как программно отображать всплывающую подсказку: D – Jaydeep
@Jaydeep: Это можно решить, вы всегда можете сохранить правильную строку в другой переменной, скажем, 'm_correctText'. Всякий раз, когда соответствие регулярному выражению выходит из строя, вы сбрасываете с помощью 'QLineEdit :: setText (m_correctText)' .. Ya относительно всплывающей подсказки [проверьте это] (http://doc.qt.nokia.com/4.7-snapshot/widgets-tooltips.html) .. Или другим предложением было бы показать QLabel с красным текстом, расположенным справа от элемента управления QLineEdit. :) – Ammar
@Jaydeep: Я обновил свой ответ, добавив рабочий пример кода .. :) – Ammar