尝试使用 QTimer 时"No such slot"

"No such slot" when trying to use QTimer

本文关键字:No such slot QTimer      更新时间:2023-10-16

我有一个定义为MyQGraphicsView::MyQGraphicsView(QWidget *parent) : QGraphicsView(parent)的图形视图包装器

在此,我试图设置一个定时GUI更新事件与QTimers。

public slots:
    void colourGUI(std::vector<Item *> &items);

然而,当我试图调用它时,我得到一个错误。我是这样称呼它的

// timer...
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(colourGUI(items)));
timer->start(2000);

我得到以下错误:

Object::connect: No such slot MyQGraphicsView::colourGUI(items)

给了什么?我设置错了吗?

您的代码有多个问题。首先,您正在尝试连接具有不同签名的信号和插槽。

你需要(1)

connect(timer, SIGNAL(timeout(std::vector<Item*>)), this, SLOT(colourGUI(std::vector<Item*>)));

代替:

connect(timer, SIGNAL(timeout()), this, SLOT(colourGUI(items)));

然而,这将只工作,如果Qt元对象系统知道如何封送这种类型,但它没有。您要么需要注册它,要么使用一个Qt集合,例如QList。而计时器也没有这样的信号。

(1) SLOT "description"不能包含参数名称,必须包含参数的类型,以便能够正确封送它们