我有一个QLineEdit,我在其上设置了一个QRegExpValidator,它允许用户在单词之间只输入一个空格 .现在我希望每当用户尝试输入多个空格时,QLineEdit的工具提示应该显示,但我没有得到任何方法来实现它 .
Thanx :)
似乎没有直接的方法来执行你想要的 . 上面做的一种方法是处理 QLineEdit 的 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.."); } }
我不会害怕你必须弹出一个自定义工具窗口(即无父级 QWidget )才能达到预期的效果 .
QWidget
如果你想像标准的工具提示那样设置你自己的弹出窗口, QStyle 应该有一些东西 . 如果有疑问,请阅读Qt源代码,在该源代码中呈现工具提示 . 那将告诉你使用哪些样式元素 .
QStyle
2 回答
似乎没有直接的方法来执行你想要的 . 上面做的一种方法是处理 QLineEdit 的 textChanged() signal . 然后,您可以使用 QRegExp::exactMatch() 函数检查该正则表达式的字符串,如果它不匹配,则显示工具提示 .
连接信号..
你的插槽在这里..
我不会害怕你必须弹出一个自定义工具窗口(即无父级
QWidget
)才能达到预期的效果 .如果你想像标准的工具提示那样设置你自己的弹出窗口,
QStyle
应该有一些东西 . 如果有疑问,请阅读Qt源代码,在该源代码中呈现工具提示 . 那将告诉你使用哪些样式元素 .