首页 > 代码库 > QT5 坐标系统
QT5 坐标系统
这次基本上没出大的错误。。根据按键向下的功能实现了一下向上的功能,还有旋转rotate()功能
myitem.h
#ifndef MYITEM_H #define MYITEM_H #include <QGraphicsItem> class myItem : public QGraphicsItem { public: myItem(); QRectF boundingRect() const; void paint(QPainter *painter,const QStyleOptionGraphicsItem *option, QWidget *widget); void setColor(const QColor &color){brushColor = color;} void keyPressEvent(QKeyEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event); //鼠标按键响应 void hoverEnterEvent(QGraphicsSceneHoverEvent *event); //停留显示 void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); private: QColor brushColor; }; #endif // MYITEM_H
myview.h
#ifndef MYVIEW_H #define MYVIEW_H #include <QGraphicsView> class MyView : public QGraphicsView { Q_OBJECT public: explicit MyView(QWidget *parent = 0); protected: void keyPressEvent(QKeyEvent *event); signals: public slots: }; #endif // MYVIEW_H
main.cpp
#include <QApplication> #include "myitem.h" #include "myview.h" #include "myitem.cpp" #include "myview.cpp" #include <QTime> int main(int argc,char *argv[]) { QApplication app(argc,argv); qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); QGraphicsScene scene; scene.setSceneRect(-200,-150,400,300); for(int i = 0;i <= 5;++i) { myItem *item = new myItem; item->setColor(QColor(qrand() % 256,qrand() % 256,qrand() % 256)); //随机生成颜色 item->setPos(i * 50 - 90, -50); scene.addItem(item); } MyView view; view.setScene(&scene); view.setBackgroundBrush(QPixmap("../myView/11.jpg")); view.show(); return app.exec(); }
myitem.cpp
#include "myitem.h" #include <QPainter> #include <QCursor> #include <QKeyEvent> #include <QGraphicsSceneHoverEvent> #include <QGraphicsSceneContextMenuEvent> #include <QMenu> myItem::myItem() { brushColor = Qt::red; setFlag(QGraphicsItem::ItemIsFocusable); setFlag(QGraphicsPathItem::ItemIsMovable); setAcceptHoverEvents(true); } QRectF myItem::boundingRect() const { qreal adjust = 0.5; return QRectF(-10 - adjust,-10 - adjust, 20 + adjust,20 + adjust); } void myItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { if(hasFocus()) { painter->setPen(QPen(QColor(255,255,255,200))); } else { painter->setPen(QPen(QColor(100,100,100,100))); } painter->setBrush(brushColor); painter->drawRect(-10,-10,20,20); } void myItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { setFocus(); setCursor(Qt::ClosedHandCursor); } void myItem::keyPressEvent(QKeyEvent *event) { if(event->key() == Qt::Key_Down) //x,y对应移动 { moveBy(0,10); } else if(event->key() == Qt::Key_Up) { moveBy(0,-10); } } void myItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { setCursor(Qt::OpenHandCursor); setToolTip("I am item"); } void myItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { QMenu menu; QAction *moveAction = menu.addAction("move back"); //右键显示菜单 QAction *selectedAction = menu.exec(event->screenPos()); if(selectedAction == moveAction) //回到(0,0)点 { setPos(0,0); } }
myview.cpp
#include "myview.h" #include <QKeyEvent> MyView::MyView(QWidget *parent) : QGraphicsView(parent) { } void MyView::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Plus: //+号 scale(1.2,1.2); break; case Qt::Key_Minus: //-号 scale(1/1.2,1/1.2); break; case Qt::Key_Right: rotate(30); break; case Qt::Key_Left: rotate(-30); break; } QGraphicsView::keyPressEvent(event); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。