【发布时间】:2012-12-27 15:38:23
【问题描述】:
我对 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 中的函数?
【问题讨论】:
-
我从未使用过
qobject_cast,但我怀疑它不是用于指针。您是否尝试过改用static_cast? -
另一种方法是让您的 validateText 函数成为验证器类的成员函数。验证器类可以在其构造函数中获取指向 QPlainTextEdit 的指针(并将此指针存储在成员变量中)并设置所有必要的信号和插槽连接。
-
是的,我确实尝试过
static_cast,但我仍然遇到同样的错误 -
嗯,添加验证器类听起来是一个更好的选择。我要试一试。感谢您的评论丹尼尔。
-
如果您解决了您的问题,请将其作为答案。允许并鼓励您这样做。一旦某个时间结束,您可以简单地接受它。然后我们有一个问题和答案。毕竟这是一个问答。 ;)
标签: c++ qt function object reference