Error with QObject::connect()
Error with QObject::connect()
我正在尝试运行QTimer
并在timeout
时警告我。为此,我使用slot
和signal
将两者联系起来。
guy.h
:
#ifndef GUY_H
#define GUY_H
#include <QGraphicsItem>
#include <QTimer>
#include <QObject>
class Guy : public QGraphicsItem
{
public:
Guy(int x, int y);
void timerStart();
public slots:
void onTimeOutTimer();
[...]
QTimer *timer;
}
#endif // GUY_H
guy.cpp
:
#include "guy.h"
#include <QTimer>
#include <QObject>
#include <stdio.h>
#include <iostream>
Guy::Guy(int x, int y)
{
timer = new QTimer();
}
void Guy::timerStart()
{
QObject::connect(timer, SIGNAL(timeout()), this, SLOT(onTimeOutTimer()));
this->timer->setInterval(1000);
this->timer->start();
std::cout << "starting timer" << std::endl;
}
void Guy::onTimeOutTimer()
{
std::cout << "check" << std::endl;
}
但是作为输出,我收到此错误:
No matching function for call to 'QObject::connect(QTimer*&, const char*, Guy* const, const char*)'
正如我所理解的,QTimer
不需要作为函数connect()
的第一个输入QObject
,但文档指定QTimer
继承自QObject
。我在这里毫无头绪。
您还需要从 QObject 继承才能使其正常工作,因为信号和插槽可用于 QObjects。 QGraphicsItem
不继承QObject
,甚至间接继承。
不仅如此,您还需要添加Q_OBJECT
宏,如下所示:
class Guy : public QObject, public QGraphicsItem
{
Q_OBJECT
...
}
甚至更好,因为QGraphicsObject继承了QObject和QGraphicsItem。
...
#include <QGraphicsObject>
...
class Guy : public QGraphicsQObject
{
Q_OBJECT
...
}
另外,如果您进行此更改,我建议将QObject::connect
更改为connect
,因为您不需要指示QObject::
范围。
附带说明一下,包括stdio.h
在这里似乎没有意义。
此外,在堆上分配 QTimer 实例对我来说似乎是浪费。它不仅会泄漏内存,还会增加复杂性。即使将其分配给堆,也应将其作为父项传递,并使用初始值设定项列表或 C++11 样式初始化。此外,如果在堆上分配它,则可以在标头中使用前向声明。
如果该槽未在类外使用,则还应将其设为私有。
公开计时器成员可能也是一个坏主意。希望你不要那样做。
您可以从QGraphicsObject
继承,它为所有需要信号、插槽的图形项提供了一个基类,并继承了QGraphicsItem
和QObject
。还要在类声明中添加Q_OBJECT
宏。
如果您使用新的 Qt5 样式,请按
QObject::connect(timer, &QTimer::timeout, this, &Guy::onTimeOutTimer)
onTimeOutTimer
功能不需要标记为插槽,Guy
可以保持非 QObject。更纤薄,涉及的宏更少。
- "error: no matching function for call to"构造函数错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- C++错误:"error: int aaa::bbb is protected within this context"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- C++ "error: invalid use of void expression"
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 如何修复"error: ‘_1’ was not declared in this scope"?
- WinSock2:connect() 提供"连接被拒绝"
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- 在 QTextEdit 中使用指针或在 Qt-Creator 上使用 connect()
- Error with QObject::connect()
- "Error: A connect request was made on an already connected socket"