班级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();
}
答案 0 :(得分:3)
要编写自己的图形项,首先要创建一个子类 QGraphicsItem,然后开始实现它的两个纯虚拟 public function:boundingRect(),它返回一个估计值 由项目绘制的区域,以及实现实际的paint() 画。
来自http://doc.qt.io/qt-5/qgraphicsitem.html#details
所以你需要实现纯虚函数paint
来绘制你的QGraphicsItem
以消除错误,你的编译器应该已经证明,除了告诉你你的类是抽象的(因为缺少函数实现)。