#include "MyItem.h"
#include <QMenu>
#include <QGraphicsSceneContextMenuEvent>
#include <QAction>
MyItem::MyItem()
{
brushColor = Qt::red;
setFlag(QGraphicsItem::ItemIsFocusable);
setFlag(QGraphicsItem::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)
{
// qDebug("************MyItem::paint*****************");
// 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);
painter->drawPixmap(-m_pix.width() / 2, -m_pix.height() / 2, m_pix);
}
// 鼠标按下事件处理函数,设置被点击的图形项获得焦点,并改变光标外观
void MyItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("************MyItem::mousePressEvent*****************");
// setFocus();
// setCursor(Qt::ClosedHandCursor);
setFocus();
setCursor(Qt::ClosedHandCursor);
//stackBefore(this);
topLevelItem();
setColor(QColor(255, 0, 0, 255));
setOpacity(0.8);
if (event->button() == Qt::LeftButton) {
if (event->modifiers() == Qt::ShiftModifier) {
qDebug() << "Custom item left clicked with shift key.";
// 选中 item
setSelected(true);
/*this->setZValue(1);*/
}
// else if (event->modifiers() == Qt::AltModifier) {
// qDebug() << "Custom item left clicked with alt key.";
// // 重置 item 大小
// double radius = boundingRect().width() / 2.0;
// QPointF topLeft = boundingRect().topLeft();
// m_centerPointF = QPointF(topLeft.x() + pos().x() + radius, topLeft.y() + pos().y() + radius);
// QPointF pos = event->scenePos();
// qDebug() << boundingRect() << radius << this->pos() << pos << event->pos();
// double dist = sqrt(pow(m_centerPointF.x() - pos.x(), 2) + pow(m_centerPointF.y() - pos.y(), 2));
// if (dist / radius > 0.8) {
// qDebug() << dist << radius << dist / radius;
// m_bResizing = true;
// }
// else {
// m_bResizing = false;
// }
// }
// else {
// qDebug() << "Custom item left clicked.";
// QGraphicsItem::mousePressEvent(event);
// event->accept();
// }
}
else if (event->button() == Qt::RightButton) {
qDebug() << "Custom item right clicked.";
event->ignore();
}
}
void MyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
setOpacity(1);
m_isMove = false;//标记鼠标左键已经抬起
if ((event->modifiers() == Qt::AltModifier) && m_bResizing) {
m_bResizing = false;
}
else {
QGraphicsItem::mouseReleaseEvent(event);
}
}
// 键盘按下事件处理函数,判断是否是向下方向键,如果是,则向下移动图形项
void MyItem::keyPressEvent(QKeyEvent *event)
{
qDebug("************MyItem::keyPressEvent*****************");
if(event->key() == Qt::Key_Down)
moveBy(0, 10);
}
// 悬停事件处理函数,设置光标外观和提示
void MyItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
qDebug("************MyItem::hoverEnterEvent*****************");
setCursor(Qt::OpenHandCursor);
setToolTip("I am item");
}
void MyItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
// qDebug("************MyItem::hoverLeaveEvent*****************");
// setCursor(Qt::ArrowCursor);
setOpacity(1);
m_isMove = false;//标记鼠标左键已经抬起
if ((event->modifiers() == Qt::AltModifier) && m_bResizing) {
m_bResizing = false;
}
else {
QGraphicsItem::hoverLeaveEvent(event);
}
}
// 右键菜单事件处理函数,为图形项添加一个右键菜单
void MyItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
QMenu menu;
QAction *moveAction = menu.addAction("move back");
QAction *actAction = menu.addAction("test");
QAction *selectedAction = menu.exec(event->screenPos());
if(selectedAction == moveAction) {
setPos(0, 0);
}
}
void MyItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("************MyItem::mouseMoveEvent*****************");
// QGraphicsItem::mouseMoveEvent(event);
this->setZValue(1);
if ((event->modifiers() == Qt::AltModifier) && m_bResizing) {
QPointF pos = event->scenePos();
double dist = sqrt(pow(m_centerPointF.x() - pos.x(), 2) + pow(m_centerPointF.y() - pos.y(), 2));
//setRect(m_centerPointF.x() - this->pos().x() - dist, m_centerPointF.y() - this->pos().y() - dist, dist * 2, dist * 2);
}
else if (event->modifiers() != Qt::AltModifier) {
qDebug() << "Custom item moved.";
QGraphicsItem::mouseMoveEvent(event);
qDebug() << "moved" << pos();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
QGraphicsItem、QGraphicsView、QGraphicsScene封装
共309个文件
idx:273个
obj:8个
cpp:8个
需积分: 0 16 下载量 67 浏览量
2023-04-02
09:23:04
上传
评论
收藏 3.14MB RAR 举报
温馨提示
QGraphicsItem、QGraphicsView、QGraphicsScene封装自定义
资源推荐
资源详情
资源评论
收起资源包目录
QGraphicsItem、QGraphicsView、QGraphicsScene封装 (309个子文件)
MyItem.cpp 6KB
moc_MainWindow.cpp 3KB
moc_MyScene.cpp 3KB
moc_MyView.cpp 3KB
MyView.cpp 1KB
main.cpp 907B
MyScene.cpp 465B
MainWindow.cpp 236B
Makefile.Debug 75KB
SceneViewItem.exe 109KB
ui_MainWindow.h 2KB
MyItem.h 1KB
MyView.h 439B
MyScene.h 348B
MainWindow.h 344B
moc_predefs.h 245B
emmintrin.h.69755A2E4667BC52.idx 149KB
qnamespace.h.0D23C12CCF37534F.idx 146KB
qstring.h.543A4D77E3562C22.idx 137KB
qmetatype.h.4E9C98DD71EE23B5.idx 120KB
qlocale.h.AF0B2746AF731984.idx 88KB
xmmintrin.h.364A73AC0B6B44A1.idx 84KB
qtypeinfo.h.B400BE21E38E61BD.idx 69KB
qgraphicsitem.h.6B0B87A199C6B4BE.idx 65KB
qstyleoption.h.509A5A955A759D22.idx 62KB
qevent.h.05D10D70764251B7.idx 62KB
qstyle.h.01FF7F69B7A020F4.idx 61KB
stdio.h.EA4B5ABC3DF30897.idx 53KB
mmintrin.h.67900D68C1AF29C2.idx 48KB
qchar.h.F2E76003B1C40E53.idx 45KB
corecrt_wstdio.h.C7F133279B7B1F01.idx 45KB
qbytearray.h.31A9C263A23DC868.idx 44KB
type_traits.4E980502E38968DD.idx 44KB
stdlib.h.670D46169E95ADED.idx 43KB
qflags.h.AF36C757137934AD.idx 43KB
qvariant.h.14954DFE6778D934.idx 43KB
qcolor.h.7E6162A2F2EBFA3B.idx 42KB
corecrt_math.h.9B1E94535B6A29FD.idx 42KB
xstring.4D95D773A26A4A9A.idx 41KB
qobjectdefs.h.6DDF825923590091.idx 40KB
memory.B549A266880EE9DE.idx 39KB
qwidget.h.CACE24137C0C9C3C.idx 38KB
qpainter.h.4F61ECAD7D5FA740.idx 38KB
qrect.h.83D0261888BE8000.idx 38KB
functional.2FD09D3CD7CBF1FC.idx 35KB
qhash.h.F9ACE7E451792093.idx 34KB
xutility.A753B6E9AB9A2191.idx 32KB
qbrush.h.B0306945ED8A38DD.idx 31KB
qmap.h.FAB00BEE627C66E9.idx 30KB
qlist.h.03646AE7DD9E7AF1.idx 30KB
qurl.h.69CB0B060969536A.idx 29KB
qglobal.h.50A4C759AECF8BC1.idx 29KB
vector.7F1AB4DC8E764E95.idx 29KB
algorithm.8844C48A1674B1C4.idx 29KB
qsharedpointer_impl.h.1B173B35CEB7B1E8.idx 28KB
atomic.03BF9527AC70B57F.idx 26KB
qabstractitemmodel.h.E5507C02666B0E51.idx 25KB
sal.h.2F78129B66FEB8AA.idx 25KB
qdatetime.h.3EB90B949341DE62.idx 24KB
chrono.AE8AB2ACA95586CD.idx 24KB
limits.AD1D64385A5C96E4.idx 23KB
qcoreevent.h.E36198C07646F31C.idx 22KB
iterator.8BE79BD0B3A92F24.idx 21KB
qobjectdefs_impl.h.CCC5F8F64E39B778.idx 21KB
qvector.h.B0F9F9FDC7112309.idx 20KB
qobject.h.27E1C7B52D6182D4.idx 19KB
qdebug.h.7B6525B79D4CF0F8.idx 19KB
qpixelformat.h.C44B26C7D63F9506.idx 19KB
qimage.h.165554D851D3E0E0.idx 19KB
tuple.E7A3AC60B9FAAF53.idx 19KB
qfont.h.D1C8348A6F01E9AA.idx 19KB
qpainterpath.h.7152E5E75840DB69.idx 18KB
qstringview.h.ED56FBE67CFCF77D.idx 18KB
string.h.AD4ED09259043E92.idx 18KB
qtextstream.h.8A252CD265AB2CE1.idx 18KB
qmargins.h.7DEA76BC918181B4.idx 18KB
qgraphicsview.h.9711472BAF582DB7.idx 18KB
qsize.h.A28D39623F1A61DD.idx 18KB
corecrt_wstring.h.DF69AE0251B168F1.idx 17KB
qtransform.h.EA021BDF75F97A96.idx 17KB
qgraphicsscene.h.0767E88A52392A98.idx 17KB
utility.491B434C778EF55D.idx 17KB
qstringlist.h.C413B14BBF8ED3BA.idx 17KB
qpoint.h.E9AFF361A840C27E.idx 16KB
qdatastream.h.BCA5AB19F890E459.idx 16KB
corecrt_wstdlib.h.E19E2FD3E982DE93.idx 16KB
crtdbg.h.71DB84DE9B350B01.idx 16KB
qgraphicssceneevent.h.38D28F7E895C7CB0.idx 16KB
qregularexpression.h.8284A8C91094A087.idx 15KB
qhashfunctions.h.6B5BE462DDCF78DF.idx 15KB
qset.h.BE8DAD92B675BA99.idx 15KB
qline.h.BD2065BE9D648BFE.idx 15KB
list.8700A9075088BBFC.idx 15KB
time.h.991C0B27BE1C1F68.idx 15KB
qvarlengtharray.h.3A4F73A95905F593.idx 13KB
xmemory.EE16E542DE8DDAB0.idx 13KB
qpair.h.3490C0662A1A1229.idx 12KB
qpalette.h.8D9CAAE4EEDC99AF.idx 12KB
map.F0EB8FE5B526D1B5.idx 12KB
qalgorithms.h.5EB6BD24FFC98F62.idx 12KB
共 309 条
- 1
- 2
- 3
- 4
资源评论
妙为
- 粉丝: 574
- 资源: 206
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功