尝试使用QTimer时“没有这样的插槽”

时间:2011-12-09 14:34:08

标签: c++ qt

我有一个定义为MyQGraphicsView::MyQGraphicsView(QWidget *parent) : QGraphicsView(parent)

的图形视图包装器

在此期间,我正在尝试使用QTimers设置定时GUI更新事件。

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 个答案:

答案 0 :(得分:3)

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

你需要(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”不得包含参数名称,并且必须包含参数的类型才能正确编组它们。