Qt文档阅读笔记-QGraphicsItem events解析与实例
目录
官方解析
博主小栗子
官方解析
QGraphicsItem events
QGraphcisItem通过QGraphicsScene的sceneEvent()这个虚函数来获取事件。这个虚函数把最常见的事件分配给事件处理程序:
1.contextMenuEvent()处理上下文菜单事件;
2.focusInEvent()和focusOutEvent()处理是否聚焦的事件;
3.hoverEnterEvent(),hoverMoveEvent()以及hoverLeaveEvent()处理鼠标悬浮进入、移动以及离开事件;
4.inputMethodEvent()掌握input事件,用于支持可访问性;
5.keyPressEvent()与keyReleaseEvent()处理键盘按压事件;
6.mousePressEvent(),mouseMoveEvent(),mouseReleaseEvent()以及mouseDoubleClickEvent()处理鼠标按下,移动,释放点击,双击;
可以使用事件过滤对任一item进行时间过滤。这个过滤与Qt的常规事件过滤不同(QObject::installEventFilter()),常规的事件过滤只作用于QObject的派生类。调用installSceneEventFilter()可以为任意的item添加事件过滤,当给某个item设置了事件过滤后,这个过滤事件就能被sceneEventFilter()这个虚函数接收。通过调用removeSceneEventFilter()可以移除事件过滤。
博主小栗子
运行截图如下:
源码如下:
mygraphicsitem.h
#ifndef MYGRAPHICSITEM_H
#define MYGRAPHICSITEM_H#include <QGraphicsItem>class MyGraphicsItem:public QGraphicsItem
{
public:MyGraphicsItem();void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);QRectF boundingRect() const;protected:void keyPressEvent(QKeyEvent *event);};#endif // MYGRAPHICSITEM_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
class QGraphicsScene;
QT_END_NAMESPACEnamespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic: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>
#include <QKeyEvent>
#include <QDebug>MyGraphicsItem::MyGraphicsItem()
{setFocus();setFlags(QGraphicsItem::ItemIsFocusable|QGraphicsItem::ItemIsMovable);
}void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{painter->save();painter->setPen(QPen(Qt::red,4));painter->drawRect(0,0,50,50);painter->restore();
}QRectF MyGraphicsItem::boundingRect() const
{return QRectF(0,0,50,50);
}void MyGraphicsItem::keyPressEvent(QKeyEvent *event)
{event->accept();if(event->key()==Qt::Key_Down)moveBy(0,10);else if(event->key()==Qt::Key_Left)moveBy(-10,0);else if(event->key()==Qt::Key_Right)moveBy(10,0);else if(event->key()==Qt::Key_Up)moveBy(0,-10);
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "mygraphicsitem.h"#include <QGraphicsScene>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_scene=new QGraphicsScene;ui->graphicsView->setScene(m_scene);MyGraphicsItem *item=new MyGraphicsItem;m_scene->addItem(item);
}Widget::~Widget()
{delete ui;
}
Qt文档阅读笔记-QGraphicsItem events解析与实例相关推荐
- Qt文档阅读笔记-QSet官方解析及实例
目录 官方解析 博主栗子 官方解析 QSet类是一个模板类,他是一个哈希表集合. QSet<T>是Qt的一个普通容器类.QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能 ...
- Qt文档阅读笔记-QSslConfiguration官方解析与实例
目录 官网解析 博主例子 官网解析 QSslConfiguration用于SSL连接的配置. QSslConfiguration是Qt networking下的一个类,这个类主要用于打开SSL连接,以 ...
- Qt文档阅读笔记-QtWebApp官方解析与实例(使用QtWebApp搭建HTTP服务器)
目录 官方解析 博主例子 官方解析 QtWepApp是一个C++的http服务器,受到了java Servlets的启发,因为是Qt写的,所以有跨平台的支持. QtWebApp包含如下的组成部分: ...
- Qt文档阅读笔记-QHostInfo官方解析与实例(根据Host获取IP)
官方解析 QHostInfo提供了一个静态方法获取主机名: QHostInfo中有一个查找机制,可以根据IP找主机名,也可能工具主机名找IP,可以通过调用QHostInfo::lookupHost这个 ...
- Qt文档阅读笔记-QTcpServer官方解析与实例(使用QSocket创建简单的HTTP服务器)
目录 官方解析 博主例子(做一个简单的HTTP服务器) 本例子中HTTP协议关键点 官方解析 QTcpServer类,提供TCP服务的基础: 这个类接受TCP连接,可以指定一个端口,也可以让其自动一个 ...
- Qt文档阅读笔记-QWebPage官方解析与实例
目录 官方解析 博主例子 源码下载地址 官方解析 QWebPage提供一个视图对象和一个web页面: QWebPage提供了web页面的内容,各种设置(是否支持JavaScript等)和连接,它与QW ...
- Qt文档阅读笔记-QWebView官方解析与实例
目录 背景 官方解析 博主例子 背景 最近发现某Qt项目,出现的效果杠杆的,在看某一小功能的时候,发现有个echart的东西,百度了发现,真的是一个新大陆,Qt加web编程,贼吉尔可怕. 在此发现使用 ...
- Qt文档阅读笔记-Q_CLASSINFO官方解析与实例
官方解析 Q_CLASSINFO 这个宏为类提供额外的信息,要想获取这个Q_CLASSINFO这个信息要使用QObject::metaObject().Qt在Active Qt,Qt D-BUS以及Q ...
- Qt文档阅读笔记-stackUnder官方解析与实例
目录 官方解析 博主例子 官方解析 这里可以配合raise()和lower()这两个函数来使用! 博主例子 用2个label,点击谁谁就浮在界面的最上面,很简单的代码,程序运行截图如下: 源码如下: ...
最新文章
- HJ86 求最大连续bit数
- jQuery中getJSON跨域原理详解
- iOS系统原生二维码条形码扫描
- 基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理
- 【JavaScript算法】---快速排序法
- XXX.C(261): error C100: unprintable character 0xA1/3 skipped
- 【Unity Shaders】Mobile Shader Adjustment —— 为手机定制Shader
- 利用Simple-RTMP-Server(SRS)来进行直播
- 计算机控制系统编程语言,可编程控制器常用的几种编程语言
- 最短路径算法|Dijkstra‘s Algorithm
- 解决从k8s.gcr.io拉取镜像失败问题
- 品牌纠纷中的盾牌——商标
- 加油站都需要什么手续_开办加油站需要办哪些手续?
- OSChina 周三乱弹 —— 程序员的专属小习惯
- DirectShow Filter的开发实践
- Zotero-word中引用跳转到参考文献/建立超链接-引用格式(Xie et al 2021, Achanta et al 2012)
- window php ice安装,bootice怎么添加win10引导
- 利用上虚拟化,说一下TLB,以及VHE
- js 去除最后一个逗号
- windows installer服务坏了修复方法