我有一个 QLineEdit,我在其上设置了一个 QRegExpValidator,它允许用户在单词之间只输入一个空格。
现在我希望每当用户尝试输入多个空格时,应该显示 QLineEdit 的工具提示,但我没有任何方法来实现它。
谢谢:)
我有一个 QLineEdit,我在其上设置了一个 QRegExpValidator,它允许用户在单词之间只输入一个空格。
现在我希望每当用户尝试输入多个空格时,应该显示 QLineEdit 的工具提示,但我没有任何方法来实现它。
谢谢:)
似乎没有直接的方法可以执行您想要的操作。一种方法是处理QLineEdit
's textChanged()
signal。然后您可以使用函数检查该字符串与您的正则表达式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..");
}
}
我不记得显示工具提示的显式 API。恐怕您必须弹出一个自定义工具窗口(即 parent-less QWidget
)才能达到预期的结果。
如果您想像标准工具提示一样设置自己的弹出窗口的样式,QStyle
那么应该有一些东西。如果有疑问,请阅读它呈现工具提示的 Qt 源代码。这将告诉您要使用哪些样式元素。