Qt和“没有这样的插槽”错误

时间:2014-02-04 13:38:15

标签: qt signals-slots qobject

我写了这个课并添加了一个插槽:

class graphShow : public QObject {
  Q_OBJECT
public:
  graphShow(){}
public slots:
  void upd(QGraphicsScene &S);
};

graphShow::upd的实施在这里:

void graphShow::upd(QGraphicsScene &S) {
    QGraphicsTextItem* pTextItem = S.addText("Test");
    pTextItem->setFlags(QGraphicsItem::ItemIsMovable);
}

连接:

graphShow gr;
QPushButton* p1 = new QPushButton("Show");
/*...*/
QObject::connect(p1,SIGNAL(clicked()),&gr,SLOT(upd(&scene);));

在编译期间我没有错误,但是当程序启动时,我看到这条消息:

  

Object :: connect:没有这样的插槽graphShow :: upd(& scene);在main.cpp:93

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要按以下方式设置连接:

QObject::connect(p1, SIGNAL(clicked()), &gr, SLOT(upd(QGraphicsScene &)));

然而,这也可能不会发生,因为Qt docs声明:

  

信号的签名必须与接收的签名相匹配   插槽。 (事实上​​,一个插槽的签名可能比它的信号更短   收到因为它可以忽略额外的参数。)

答案 1 :(得分:1)

顺便说一下,你做错了。你不能将没有参数的信号连接到带参数的插槽。对于您的情况,您应该使用QSignalMapper