首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Q_OBJECT会产生许多错误

Q_OBJECT会产生许多错误
EN

Stack Overflow用户
提问于 2013-11-22 07:34:20
回答 2查看 206关注 0票数 1

这门课没问题:

代码语言:javascript
复制
#include <QThread>

class LiveImageItem : public QThread
{
    Q_OBJECT
public:
    LiveImageItem(QPixmap pimg);

signals:

public slots:

};

但是这个类遇到了与头文件中定义的"Q_OBJECT“宏相关的问题。

代码语言:javascript
复制
#include <QGraphicsPixmapItem>

class LiveImageItem : public QGraphicsPixmapItem
{

    Q_OBJECT //this line will generate many errors in compiling

public:
    LiveImageItem(QPixmap pimg);

signals:

public slots:

};

它们的两个cpp文件都是相同的:

代码语言:javascript
复制
#include "LiveImageItem.h"

LiveImageItem::LiveImageItem(QPixmap pimg)
{
}

我认为每个QT对象本质上都是从QObject继承的,所以如果我继承了QObject的任何子类,我就可以拥有QObject提供的所有magics。上面的第二个版本(继承自QGraphicsPixmapItem)似乎证明了我是错的。结果是编译时出现了很多错误,这些错误都来自moc文件(由QT自动生成)。会发生什么?

其中一些错误是:

  • qobject.h错误:“QScopedPointer QObject::d_ptr”受保护
  • moc_LiveImageItem.cpp错误:在此上下文中
  • ..。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-22 07:38:44

根据文档,QGraphicsPixmapItem不是一个QObject,因此您不能把它当作是一个QObject。我会尝试扩展您的类继承,并这样做:

代码语言:javascript
复制
class LiveImageItem : public QObject, public QGraphicsPixmapItem
{

    Q_OBJECT //this line will generate many errors in compiling
[..]
票数 4
EN

Stack Overflow用户

发布于 2013-11-22 08:53:57

正如@vahancho所说,QGraphicsPixmapItem不是QObject。事实上,这可以说是大多数QGraphics*Item类的例子。

但是,如果您想在QGraphicsSystem类中使用信号和插槽,您可以从QGraphicsObject继承:-

代码语言:javascript
复制
class LiveImageItem : public QGraphicsObject
{
    Q_OBJECT

    public:


    private:
        QPixmap m_pixmap;
};

然后,您将重写该类中的画图函数,并从其中绘制像素映射。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20139469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档