我有这样的类(class):
#include <QObject>
namespace taservices
{
class ProcessHandle : public QObject
{
Q_OBJECT
public:
ProcessHandle(const void* const processContextPointer, const QString& process_id = "", QObject *parent = 0);
ProcessHandle();
signals:
void progress(const ProcessHandle* const self, const int value);
private:
static void registerAsMetaType();
}
我有一个信号:
void progress(const ProcessHandle* const self, const int value);
我想通过 QueuedConnedtion 连接它。我不断收到此消息:
QObject::connect: Cannot queue arguments of type 'ProcessHandle*const'
(Make sure 'ProcessHandle*const' is registered using qRegisterMetaType().)
我在声明后像这样注册我的类:
Q_DECLARE_METATYPE(taservices::ProcessHandle*);
我还添加了这个从构造函数调用的静态方法:
void ProcessHandle::registerAsMetaType()
{
static bool called = false;
if(!called) {
called = true;
qRegisterMetaType<ProcessHandle*>("taservices::ProcessHandle*");
}
}
我也尝试注册 const
指针:
qRegisterMetaType<ProcessHandle*const>("taservices::ProcessHandle*const");
它会导致以下错误:
error C2440: 'return' : cannot convert from 'taservices::ProcessHandle *const *' to 'void *'
那么如何让我的类使用排队连接?
最佳答案
原来这是你需要的:
qRegisterMetaType<ProcessHandle*>("ProcessHandle*");
qRegisterMetaType<ProcessHandle*>("ProcessHandle*const");
出于排队参数的目的,const
指针等于普通指针,因为它正在被复制而不是被改变。
关于c++ - QObject::connect: 无法对 MyClass*const 类型的参数进行排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42163294/