如何将小部件对象传递给Qt中的函数?

时间:2013-01-13 16:34:26

标签: c++ qt function object reference

我对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 slot中有这段代码:

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

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

1 个答案:

答案 0 :(得分:3)

好的,正如Daniel在评论中所建议的那样,我添加了一个验证器类并修复了我遇到的问题。以下是将来遇到同样问题的人的代码。

<强> validator.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或任何废话的需要。