c++ - QObject::connect: 无法对 MyClass*const 类型的参数进行排队

标签 c++ qt signals-slots queued-connection

我有这样的类(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/

相关文章:

c# - 如何在写入/读取 int 值时触发函数调用?

c++ - 从模板类继承的类的正确声明

c++ - 没有已知的来自 unique_ptr 的转换,前向声明?

c++ - VS2015 + VTK 7.1.0 + Qt 5.8.0 运行来自 VTK 入口点失败的 Qt 示例

visual-studio - 如何在具有默认参数的插槽上使用 Qt5 connect()

c++ - operator = 模板类中的重载

c++ - 如何在 QPushButtons 上使用 mousePressEvent

c++ - 在两个 QWidget 实例之间共享数据

python - PyQt 正确使用 emit() 和 pyqtSignal()

Qt Creator - 如何查看设计器的代码?