试图在Qt

时间:2017-03-29 07:53:53

标签: c++ qt

班级Kwadrat有什么问题?我有一个错误:

  

抽象类类型'Kwadrat'

的新表达式无效
Kwadrat* kwadrat = new Kwadrat(20);

我想在屏幕上移动一个正方形(当它在X上达到370或在Y坐标上达到370时,它会回到中间)。

当Kwadrat是经典的QGraphicsRectItem时,我有一个(0,0)坐标的错误。

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QPixmap>
#include "poruszanie.h"
#include <QRectF>
#include <QGraphicsRectItem>

class Kwadrat : public QGraphicsItem
{
    Q_OBJECT

public:
    Kwadrat(int size)
        : QGraphicsItem(NULL) // we could parent, but this may confuse at first
    {
        m_boundingRect = QRectF(0, 0, size, size);
    }

    QRectF boundingRect() const
    {
        return m_boundingRect;
    }

private:
    QRectF m_boundingRect;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene*scena=new QGraphicsScene();

   // Poruszanie*kwadrat=new Poruszanie();
   // kwadrat->setRect(0,0,20,20);
   // kwadrat->setBrush(QBrush(Qt::white));
   // scena->addItem(kwadrat);

    Kwadrat*kwadrat=new Kwadrat(20);
    kwadrat->setBrush(QBrush(Qt::white));
    scena->addItem(kwadrat);

    kwadrat->setFlag(QGraphicsItem::ItemIsFocusable);
    kwadrat->setFocus();

    QGraphicsView *widok=new QGraphicsView(scena);
    widok->setBackgroundBrush(QBrush(Qt::yellow));
    widok->setMinimumSize(400,400);
    widok->show();

    return a.exec();
}

1 个答案:

答案 0 :(得分:3)

  

要编写自己的图形项,首先要创建一个子类   QGraphicsItem,然后开始实现它的两个纯虚拟   public function:boundingRect(),它返回一个估计值   由项目绘制的区域,以及实现实际的paint()   画。

来自http://doc.qt.io/qt-5/qgraphicsitem.html#details

所以你需要实现纯虚函数paint来绘制你的QGraphicsItem以消除错误,你的编译器应该已经证明,除了告诉你你的类是抽象的(因为缺少函数实现)。