2

cppファイルのコンパイル中に次のエラーが発生します。

Object::connect: No such slot AllWidgets::m_pSpinBoxOut->setText( const QString &) in Widgets.cpp:148

これが148行目です。

 connect(m_pSpinBox,SIGNAL(valueChanged(double)),this,SLOT(m_pSpinBoxOut->setText( const QString &)));

最初のm_pSpinBoxは単なるSpinBoxであり、問​​題はありませんが、m_pSpinBoxOut(QLabel)にはsetTextスロットがないと表示されます...実際、QT Webサイトでは、それがあることが示されています...

また、この148行目を次のように変更しようとしました。

connect(m_pSpinBox,SIGNAL(valueChanged(double)),m_pSpinBoxOut,SLOT(setText("demo")));

connect(m_pSpinBox,SIGNAL(valueChanged(double)),m_pSpinBoxOut,SLOT(QLabel::setText("demo")))

connect(m_pSpinBox,SIGNAL(valueChanged(double)),m_pSpinBoxOut,SLOT(QString::setText("demo")));

警告メッセージだけが変更されました。それぞれ:

Object::connect: No such slot QLabel::setText("demo")
Object::connect: No such slot QLabel::QLabel::setText("demo")
Object::connect: No such slot QLabel::QString::setText("demo")

私は何が間違っているのですか?

4

1 に答える 1

4
connect(m_pSpinBox,SIGNAL(valueChanged(double)),
        m_pSpinBoxOut,SLOT(setText(const QString&)));

SLOTは受信メソッドの名前と引数である必要があり、所有するという事実は関係thisありませんm_pSpinBoxOut。また、arg 宣言に式 (つまりQLabel::setText("demo")) を含めることはできません。

doubleまた、 aを a に暗黙的にキャストできないため、この接続はとにかく機能しないことも指摘しておく必要がありQStringます。したがって、変換スロットを作成する必要があります。

connect(m_pSpinBox,SIGNAL(valueChanged(double)),
        this,SLOT(converterSlot(double)));
...
AllWidgets::converterSlot(double number)
{
    m_pSpinBoxOut->setText(QString::number(number));
}

Qt 5 を使用している場合は、代わりにラムダを使用して、余分なスロットなしでこれを行うことができます。

于 2013-02-18T21:07:43.400 に答える