我写了这个课并添加了一个插槽:
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
我做错了什么?
答案 0 :(得分:2)
您需要按以下方式设置连接:
QObject::connect(p1, SIGNAL(clicked()), &gr, SLOT(upd(QGraphicsScene &)));
然而,这也可能不会发生,因为Qt docs声明:
信号的签名必须与接收的签名相匹配 插槽。 (事实上,一个插槽的签名可能比它的信号更短 收到因为它可以忽略额外的参数。)
答案 1 :(得分:1)