【问题标题】: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 非常感谢你

标签: c++ qt


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 2020-07-21
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    相关资源
    最近更新 更多