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

さて、コメントでダニエルによって提案されたように、私はバリデータークラスを追加しました、そしてそれは私が抱えていた問題を修正しました。これは、将来同じ問題を抱えている人のためのコードです。

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またはそのナンセンスのいずれかにキャストする必要が完全にスキップされました。

于 2013-01-14T01:09:53.740 に答える