不完整类型'class QGraphicsRectItem'的无效使用[重复]

Posted

技术标签:

【中文标题】不完整类型\'class QGraphicsRectItem\'的无效使用[重复]【英文标题】:invalid use of incomplete type 'class QGraphicsRectItem' [duplicate]不完整类型'class QGraphicsRectItem'的无效使用[重复] 【发布时间】:2017-10-12 18:23:24 【问题描述】:

我正在尝试创建可移动矩形,这是我的代码。但出现以下 3 个错误。

invalid use of incomplete type 'class QGraphicsRectItem' rect->setFlag(QGraphicsItem::ItemIsMovable, true);

forward declaration of 'class QGraphicsItem' class QGraphicsItem;

incomplete type 'QGraphicsItem' used in nested name specifier

没有这一行 (rect->setFlag(QGraphicsItem::ItemIsMovable, true);) 程序运行没有任何错误。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QGraphicsScene>
#include <QWidget>
#include <QtCore>
#include <QtGui>


namespace Ui 
class Widget;


class Widget : public QWidget

    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    QGraphicsScene *scene;
    QGraphicsEllipseItem *elipse;
    QGraphicsRectItem *rect;

;

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QCursor>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)

    ui->setupUi(this);
    scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);

    QBrush redBrush(Qt::red);
    QBrush blueBrush(Qt::blue);
    QPen blackPen(Qt::black);
    blackPen.setWidth(6);

    elipse = scene->addEllipse(10,10,100,100,blackPen,redBrush);
    rect = scene->addRect(-10,-10,100,100,blackPen,redBrush);
    rect->setFlag(QGraphicsItem::ItemIsMovable, true);



Widget::~Widget()

    delete ui;


void Widget::on_pushButton_clicked()



【问题讨论】:

#include &lt;QGraphicsRectItem&gt;#include &lt;QGraphicsItem&gt; 添加到widget.h,解决您的问题。 @eyllanesc 非常感谢先生 :) 问题已解决。先生,我怎么能识别这种类型的错误。 Qt 显示错误无助于我识别真正的问题。有任何方法来识别此类错误 我建议你包含你使用的每个类的标题,以避免这种愚蠢的问题。 任何时候你看到编译器告诉你一个类型是“不完整的”,这意味着它已经看到了一个前向声明,例如类 QGraphicsRectItem;但还没有看到完整的类定义。所以你所要做的就是找到包含完整类定义的头文件并确保它被正确包含。 @Joe 非常感谢你 【参考方案1】:

您的代码中没有包含您正在使用的&lt;QGraphicsRectItem&gt; 类。在开头添加它:

#include <QGraphicsScene>
#include <QGraphicsRectItem> //You missed
#include <QWidget>
#include <QtCore>
#include <QtGui>

【讨论】:

以上是关于不完整类型'class QGraphicsRectItem'的无效使用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

完整日历时间轴周的问题:spec.class不是构造函数

如何在C++中获得完整的类型名称

31反射(获取Class实例剖析运行时类的完整结构读取properties文件反射创建类越过泛型检查)枚举

指向不完整类型的指针可以不完整吗?

C语言 不允许使用不完整的类型

是啥导致类型不完整? (QGraphicsItem:源或目标的类型不完整)