繁体   English   中英

尝试在Qt中使用boundingRect

[英]Trying to use boundingRect in Qt

KwadratKwadrat 我有一个错误:

无效的抽象类类型'Kwadrat'的new表达式

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();
}

要编写自己的图形项,首先要创建QGraphicsItem的子类,然后从实现其两个纯虚拟公共函数开始:boundingRect()返回该项所绘制区域的估计值,paint()实现实际绘画。

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

因此,您需要实现纯虚函数paint来对QGraphicsItem进行绘制以消除错误,除了告诉您类是抽象的(由于缺少函数实现)之外,编译器还应表明这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM