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 网站上显示它有它......

我还尝试将第 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的事实无关紧要。arg 声明也不能包含表达式(即)。thism_pSpinBoxOutQLabel::setText("demo")

我还应该指出,这种连接无论如何都不起作用,因为 adouble不能隐式转换为 a QString。所以你必须创建一个转换槽:

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

如果您使用的是 Qt 5,您也可以使用 lambda 来执行此操作,而无需额外的插槽。

于 2013-02-18T21:07:43.400 回答