[英]Trying to use boundingRect in Qt
Kwadrat
班Kwadrat
? 我有一个错误:
无效的抽象类类型'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.