啥意思,感觉本人语文学得菜,不好描述。
直接看程序运行截图:
1.隐藏鼠标;
2.图元分组;
3.视图与场景坐标转换
程序源码如下:
mygraphicsitem.h
#ifndef MYGRAPHICSITEM_H
#define MYGRAPHICSITEM_H
#include <QGraphicsItem>
class MyGraphicsItem:public QGraphicsItem
{
public:
MyGraphicsItem(QGraphicsItem *parent=0);
QRectF boundingRect()const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};
#endif // MYGRAPHICSITEM_H
mygraphicsview.h
#ifndef MYGRAPHICSVIEW_H
#define MYGRAPHICSVIEW_H
#include <QGraphicsView>
class MyGraphicsItem;
class MyGraphicsView:public QGraphicsView
{
Q_OBJECT
public:
MyGraphicsView(QWidget *parent=0);
~MyGraphicsView();
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void setStartAndEndItem(MyGraphicsItem *start, MyGraphicsItem *end);
private:
qreal m_itemPosX;
qreal m_itemPosY;
qreal m_changedPosX;
MyGraphicsItem *m_item;
MyGraphicsItem *m_startItem;
MyGraphicsItem *m_endItem;
};
#endif // MYGRAPHICSVIEW_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class QGraphicsScene;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QGraphicsScene *m_scene;
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
mygraphicsitem.cpp
#include "mygraphicsitem.h"
#include <QPainter>
MyGraphicsItem::MyGraphicsItem(QGraphicsItem *parent):
QGraphicsItem(parent)
{
}
QRectF MyGraphicsItem::boundingRect() const
{
qreal penWidth=1;
return QRectF(0-penWidth/2,0-penWidth/2,50+penWidth,50+penWidth);
}
void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
painter->setPen(QPen(Qt::red,2));
painter->drawRect(0,0,50,50);
}
mygrpahicsview.cpp
#include "mygraphicsview.h"
#include <QDebug>
#include <QGraphicsScene>
#include "mygraphicsitem.h"
#include <QMouseEvent>
MyGraphicsView::MyGraphicsView(QWidget *parent):
QGraphicsView(parent)
{
}
MyGraphicsView::~MyGraphicsView()
{
}
void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{
m_changedPosX=event->x();
m_item=new MyGraphicsItem;
m_item->setPos(m_startItem->pos());
scene()->addItem(m_item);
setCursor(Qt::BlankCursor);
QGraphicsView::mousePressEvent(event);
}
void MyGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
setCursor(Qt::ArrowCursor);
delete m_item;
QGraphicsView::mouseReleaseEvent(event);
}
void MyGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
qDebug()<<"最右端:"<<m_itemPosX+event->pos().x()-m_changedPosX<<" "<<m_endItem->pos().x();
qDebug()<<"最左端:"<<m_itemPosX+event->pos().x()-m_changedPosX<<" "<<m_startItem->pos().x();
if(m_itemPosX+event->pos().x()-m_changedPosX>m_endItem->pos().x()
||m_itemPosX+event->pos().x()-m_changedPosX<m_startItem->pos().x()){
return;
}
m_item->setPos(m_itemPosX+event->pos().x()-m_changedPosX,m_itemPosY);
}
void MyGraphicsView::setStartAndEndItem(MyGraphicsItem *start,MyGraphicsItem *end)
{
m_startItem=start;
m_endItem=end;
m_itemPosX=m_startItem->pos().x();
m_itemPosY=m_startItem->pos().y();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QGraphicsScene>
#include <QMouseEvent>
#include <QDebug>
#include <QGraphicsItemGroup>
#include "mygraphicsitem.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_scene=new QGraphicsScene;
ui->graphicsView->setScene(m_scene);
MyGraphicsItem *startItem=new MyGraphicsItem;
startItem->setPos(-300,0);
MyGraphicsItem *endItem=new MyGraphicsItem;
endItem->setPos(300,0);
QGraphicsItemGroup *group=new QGraphicsItemGroup;
group->addToGroup(startItem);
group->addToGroup(endItem);
group->setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
m_scene->addItem(group);
ui->graphicsView->setStartAndEndItem(startItem,endItem);
}
Widget::~Widget()
{
delete ui;
}