2012-05-14 3 views
0

У меня есть QLineEdit, на котором я установил QRegExpValidator, который позволяет пользователю вводить только одно пробел между словами.
Теперь я хочу, чтобы всякий раз, когда пользователь пытается ввести более одного пробела, всплывающая подсказка QLineEdit должна появиться, но я не получаю никакого способа ее реализовать.Qt: подсказка о неправильном вводе

Thanx :)

ответ

2

Кажется, нет прямого способа выполнить то, что вы хотите. Один из способов сделать выше - обработать QLineEdittextChanged() сигнал. Затем вы можете проверить эту строку на свое регулярное выражение с помощью функции 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.."); 
    } 
} 
+0

Я получил вашу идею, но было бы две проблемы с этим подходом: 1) Я использую QRegExpValidator, что означает, что я не хочу, чтобы пользователь вводил какую-либо недопустимую строку, используя ваш подход, пользователь может ввести неверный ввод 2) Я не знаю, как программно отображать всплывающую подсказку: D – Jaydeep

+0

@Jaydeep: Это можно решить, вы всегда можете сохранить правильную строку в другой переменной, скажем, 'm_correctText'. Всякий раз, когда соответствие регулярному выражению выходит из строя, вы сбрасываете с помощью 'QLineEdit :: setText (m_correctText)' .. Ya относительно всплывающей подсказки [проверьте это] (http://doc.qt.nokia.com/4.7-snapshot/widgets-tooltips.html) .. Или другим предложением было бы показать QLabel с красным текстом, расположенным справа от элемента управления QLineEdit. :) – Ammar

+0

@Jaydeep: Я обновил свой ответ, добавив рабочий пример кода .. :) – Ammar

0

Я не помню явного API для показа подсказки. Боюсь, вам придётся вытащить окно пользовательского инструмента (то есть без родителя QWidget), чтобы достичь желаемого результата.

Если вы хотите создать собственное всплывающее окно, как стандартная всплывающая подсказка, QStyle должно иметь что-то для этого. Если есть сомнения, прочитайте исходный код Qt, где он отображает всплывающую подсказку. Это скажет вам, какие элементы стиля использовать.

Смежные вопросы