2

我对 Qt 相当陌生,如果有人能帮助我解决这个问题,我将不胜感激。我正在使用 Qt Creator 并创建了一个带有PlainTextEdit. 我正在尝试使用 if 语句来验证在此文本框中输入的文本。我做了一个如下的函数

void validateText (QPlainTextEdit *myWidget)
{
    if ((myWidget->toPlainText().endsWith("1")) ||
        (myWidget->toPlainText().endsWith("2")) ||
        (myWidget->toPlainText().endsWith("3")) ||
        (myWidget->toPlainText().endsWith("4")) ||
        (myWidget->toPlainText().endsWith("5")) ||
        (myWidget->toPlainText().endsWith("6")) ||
        (myWidget->toPlainText().endsWith("7")) ||
        (myWidget->toPlainText().endsWith("8")) ||
        (myWidget->toPlainText().endsWith("9")) ||
        (myWidget->toPlainText().endsWith("0"))
    )
    {
        qDebug() << "Integer entered";
    }
    else
    {
        qDebug() << "Non-integer entered";
    }
}

但是,当我从插槽调用此函数时on_plainTextEdit_textChanged(),出现错误:

undefined reference to validateText(QPlainTextEdit*)

目前,到目前为止,我在 textchanged 插槽中有这段代码:

void Options::on_plainTextEdit_textChanged()
{
    validateText(qobject_cast<QPlainTextEdit*>(qApp->widgetAt(180,30)));
}

如您所见,我正在尝试获取对对象本身的引用并将其传递给函数,但我遇到了问题。我做错了什么,还是有更简单的方法将小部件对象传递给 Qt 中的函数?

4

1 回答 1

3

好吧,正如丹尼尔在评论中所建议的那样,我添加了一个验证器类并解决了我遇到的问题。这是将来遇到相同问题的任何人的代码。

验证器.cpp

...
Validator::Validator(QPlainTextEdit *textEdit)
{
    this->myWidget = textEdit;
}
void Validator::validateText ()
{
    if (   (myWidget->toPlainText().endsWith("1")) ||
           (myWidget->toPlainText().endsWith("2")) ||
           (myWidget->toPlainText().endsWith("3")) ||
           (myWidget->toPlainText().endsWith("4")) ||
           (myWidget->toPlainText().endsWith("5")) ||
           (myWidget->toPlainText().endsWith("6")) ||
           (myWidget->toPlainText().endsWith("7")) ||
           (myWidget->toPlainText().endsWith("8")) ||
           (myWidget->toPlainText().endsWith("9")) ||
           (myWidget->toPlainText().endsWith("0"))
        )
    {
        qDebug() << "Integer entered";
    }
    else
    {
        qDebug() << "Non-integer entered";
    }
}

和函数调用

void Options::on_plainTextEdit_textChanged()
{
    Validator* val = new Validator(ui->plainTextEdit);
    val->validateText();
}

这完全跳过了从 QWidget 转换为 QPlainTextEdit 或任何废话的需要。

于 2013-01-14T01:09:53.740 回答