QT:模板化的Q_OBJECT类 [英] QT : Templated Q_OBJECT class

查看:2367
本文介绍了QT:模板化的Q_OBJECT类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有可能有一个模板类,它继承自QObject(并且它的声明中有Q_OBJECT宏)?

Is it possible to have a template class, which inherit from QObject (and has Q_OBJECT macro in it's declaration)?

我想创建一个像adapter槽,这将做某事,但槽可以采取任意数量的参数(参数数量取决于模板参数)。

I would like to create something like adapter for slots, which would do something, but the slot can take arbitrary number of arguments (number of arguments depends on the template argument).

我只是试着做,链接器错误。我想gmake或moc不会被调用这个模板类。有办法做到这一点吗?可能通过显式实例化模板?

I just tried doing it, and got linker errors. I guess gmake or moc is not getting called on this template class. Is there a way to do this? Maybe by explicitly instantiating templates?

推荐答案

不可能混合模板和Q_OBJECT,但如果你有一个类型的子集,列出这样的插槽和信号:

It is not possible to mix template and Q_OBJECT but if you have a subset of types you can list the slots and signals like this:

    class SignalsSlots : public QObject
    {
        Q_OBJECT

    public:
        explicit SignalsSlots(QObject *parent = 0) :
            QObject(parent) {}

    public slots:
        virtual void writeAsync(int value) {}
        virtual void writeAsync(float value) {}
        virtual void writeAsync(double value) {}
        virtual void writeAsync(bool state) {}
        virtual void writeAsync(svga::SSlideSwitch::SwitchState state) {}   

    signals:
        void readAsynkPolledChanged(int value);
        void readAsynkPolledChanged(float value);
        void readAsynkPolledChanged(double value);
        void readAsynkPolledChanged(bool state);
        void readAsynkPolledChanged(svga::SSlideSwitch::SwitchState state);
    };
...
template <class T>
class Abstraction : public SignalsSlots
{...

这篇关于QT:模板化的Q_OBJECT类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆