我有一个定义为 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)
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“描述”不得包含参数名称,并且必须包含参数类型以便能够正确编码它们。
关于c++ - 尝试使用 QTimer 时出现 "No such slot",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446993/