当前位置: 代码迷 >> QT开发 >> 关于QGraphicsItem解决方案
  详细解决方案

关于QGraphicsItem解决方案

热度:165   发布时间:2016-04-25 03:13:47.0
关于QGraphicsItem
myitem.h
#ifndef MYITEM_H
#define MYITEM_H
 
#include <QGraphicsItem>
#include <QPainter>
 
class MyItem : public QGraphicsItem
{
    Q_OBJECT
public:
    MyItem(QObject *parent = 0);
    ~MyItem();
protected:
    QRectF boundingRect() const;
    void paint(QPainter *,const QStyleOptionGraphicsItem *,QWidget *);
 
};
 
#endif // MYITEM_H
 
myitem.cpp
#include "myitem.h"
 
MyItem::MyItem(QObject *parent) :
    QGraphicsItem(parent)                  //这里总是报错:no matching function for call to 'QGraphicsItem::QGraphicsItem(QObject*&),求解
{
}
 
MyItem::~MyItem()
{
 
}
 
QRectF MyItem::boundingRect() const
{
    qreal penWidth=1;
 
    return QRectF(0-penWidth/2,0-penWidth/2,20+penWidth,20+penWidth);
}
 
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
    painter->setBrush(Qt::red);
    painter->drawRect(0,0,20,20);
}
 
main.cpp
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QGraphicsView>
#include <QDebug>
#include "myitem.h"
 
int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
 
    QTransform transForm;
    QGraphicsScene scene;
    MyItem *item=new MyItem;
    scene.addItem(item);
    //qDebug()<<scene.itemAt(50,50,transForm)<<endl;
    QGraphicsView view(&scene);
    view.setForegroundBrush(QBrush(QColor(255,255,255,100)));
    view.setBackgroundBrush(QBrush(QPixmap(":/green.jpg")));
    view.resize(400,300);
    view.show();
 
    return app.exec();
}
 
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你的类型声明错了吧:
class MyItem : public QGraphicsItem
{
    Q_OBJECT
public:
    MyItem(QObject *parent = 0);
    ~MyItem();
protected:
    QRectF boundingRect() const;
    void paint(QPainter *,const QStyleOptionGraphicsItem *,QWidget *);
 
};
这个MyItem构造函数的参数不是QObject,应该是QWidget;

还是不行啊,报错:no matching function for call to 'QGraphicsItem::QGraphicsItem(QWidget*&)

不好意思哈,那个构造函数的参数类型是QGraphicsItem

改成这样:
class MyItem : public QGraphicsItem
{
    Q_OBJECT
public:
    explicit MyItem(QGraphicsItem *parent = 0);
    ~MyItem();
protected:
    QRectF boundingRect() const;
    void paint(QPainter *,const QStyleOptionGraphicsItem *,QWidget *);

};

MyItem::MyItem(QGraphicsItem *parent) :
    QGraphicsItem(parent)
{
}
可是这样错误更多了

是的,你看你这里函数声明:
    void paint(QPainter *,const QStyleOptionGraphicsItem *,QWidget *);
再看看你的函数定义:
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
    painter->setBrush(Qt::red);
    painter->drawRect(0,0,20,20);
}
你应该把函数这样声明:
    void paint(QPainter *painter,const QStyleOptionGraphicsItem *,QWidget *);
  相关解决方案