怎么建设小型网站企业网站制作公司

张小明 2026/3/2 21:44:47
怎么建设小型网站,企业网站制作公司,云南智能建站,wordpress js跳转在项目中为了便于对组合后的图元进行管理#xff0c;一般会继承 QGraphicsItemGroup 实现自己的 group 类#xff0c;这样可以方便的借用 QGraphicsItemGroup 对内部图元进行管理#xff0c;但同时也受到了 QGraphicsItemGroup 实现的约束。例如#xff1a;QGraphicsItemGr…在项目中为了便于对组合后的图元进行管理一般会继承 QGraphicsItemGroup 实现自己的 group 类这样可以方便的借用 QGraphicsItemGroup 对内部图元进行管理但同时也受到了 QGraphicsItemGroup 实现的约束。例如QGraphicsItemGroup 对象的默认原点坐标为{00}对鼠标键盘的消息默认由 QGraphicsItemGroup 处理内部图元控件不会处理等。这里主要讨论使用 addToGroup() 或 removeFromGroup() 时 group 的 bound 会发生变化此时需要调整 group 的坐标及尺寸。因为我们可能一次向 group 添加/移除一个控件也可能添加、移除多个group 的坐标及尺寸最好在添加/移除后进行调整。但是为了提高代码的内聚性我们更希望在 group 内部图元发生变化后由 group 自动调整位置及大小。继承 QGraphicsItemGroup 后重载 itemChange() 方法当内部图元发生变化时可以通过 change QGraphicsItem::ItemChildAddedChange 监听添加图元的信号、change QGraphicsItem::ItemChildRemovedChange 监听移除图元的信号。如果在 itemChange() 方法中处理 group 的坐标及尺寸就会发生不可思议的问题明明位置与尺寸都计算正确但是内部图元的位置却发生莫名的偏移。通过监控内部图元的坐标发现计算的坐标完全正确但是显示位置就是不对。如下图图一是组合前的位置图二是组合后的位置组合后显示的选择框就是重新调整后的 group 的位置及大小内部的矩形与圆形已经偏离了原位置。image图一 组合前的位置image图二 组合后的位置发生这个问题的原因是不能在 itemChange() 方法内处理 group 的位置及坐标因为此时addToGroup() 或 removeFromGroup() 的代码还未执行完毕。看一下 addToGroup() 的源码// 文件位置 qt-everywhere-src-6.7.3\qtbase\src\widgets\graphicsview\qgraphicsitem.cppvoid QGraphicsItemGroup::addToGroup(QGraphicsItem *item){Q_D(QGraphicsItemGroup);if (!item) {qWarning(QGraphicsItemGroup::addToGroup: cannot add null item);return;}if (item this) {qWarning(QGraphicsItemGroup::addToGroup: cannot add a group to itself);return;}// COMBINEbool ok;QTransform itemTransform item-itemTransform(this, ok);if (!ok) {qWarning(QGraphicsItemGroup::addToGroup: could not find a valid transformation from item to group coordinates);return;}QTransform newItemTransform(itemTransform);item-setPos(mapFromItem(item, 0, 0));// 设置父项目时会触发 itemChange() 方法item-setParentItem(this);// removing position from translation component of the new transformif (!item-pos().isNull())newItemTransform * QTransform::fromTranslate(-item-x(), -item-y());// removing additional transformations properties applied with itemTransform()QPointF origin item-transformOriginPoint();QMatrix4x4 m;QListQGraphicsTransform* transformList item-transformations();for (int i 0; i transformList.size(); i)transformList.at(i)-applyTo(m);newItemTransform * m.toTransform().inverted();newItemTransform.translate(origin.x(), origin.y());newItemTransform.rotate(-item-rotation());newItemTransform.scale(1/item-scale(), 1/item-scale());newItemTransform.translate(-origin.x(), -origin.y());// ### Expensive, we could maybe use dirtySceneTransform bit for optimizationitem-setTransform(newItemTransform);item-d_func()-setIsMemberOfGroup(true);prepareGeometryChange();d-itemsBoundingRect | itemTransform.mapRect(item-boundingRect() | item-childrenBoundingRect());update();}void QGraphicsItem::setParentItem(QGraphicsItem *newParent){if (newParent this) {qWarning(QGraphicsItem::setParentItem: cannot assign %p as a parent of itself, this);return;}if (newParent d_ptr-parent)return;const QVariant newParentVariant(itemChange(QGraphicsItem::ItemParentChange,QVariant::fromValueQGraphicsItem *(newParent)));newParent qvariant_castQGraphicsItem *(newParentVariant);if (newParent d_ptr-parent)return;const QVariant thisPointerVariant(QVariant::fromValueQGraphicsItem *(this));// setParentItemHelper 内部触发 itemChange() 方法d_ptr-setParentItemHelper(newParent, newParentVariant, thisPointerVariant);}void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const QVariant *newParentVariant, const QVariant *thisPointerVariant){Q_Q(QGraphicsItem);if (newParent parent)return;...if (parent) {// Remove from current parentparent-d_ptr-removeChild(q);if (thisPointerVariant)parent-itemChange(QGraphicsItem::ItemChildRemovedChange, thisPointerVariant);}...// Deliver post-change notificationif (newParentVariant)q-itemChange(QGraphicsItem::ItemParentHasChanged, *newParentVariant);if (isObject)emit static_castQGraphicsObject *(q)-parentChanged();}通过源码可以发现如果在 itemChange() 内部处理 group 的坐标及尺寸确实会出现很多问题因为此时 addToGroup() 还未执行 transform 变换。要解决此问题就必须等待addToGroup() 执行完成再去计算坐标及尺寸。可以在 itemChange() 发射一个信号采用异步处理该信号将处理过程推迟到下一个事件循环。这样就能够完美解决问题。具体代码可以参考项目 Compelling Data Designer 中 dashboard/BIDesigner/graphicsitemgroup.cpp 的处理过程。该项目用于数据的可视化设计软件采用可扩展架构支持扩展图形插件、数据接口。项目仍在开发中目前已设计完成基本图形、多属性配置、动画等功能。image
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

可以做旅行计划的网站大冶专业建站公司

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2025/12/27 22:37:11 网站建设

中国建设银行河北省门户网站wordpress图片设置水印

SmartCrop.js智能图像裁剪完全指南:让每张图片都完美呈现 【免费下载链接】smartcrop.js Content aware image cropping 项目地址: https://gitcode.com/gh_mirrors/smar/smartcrop.js 在当今视觉内容爆炸的时代,如何让图片在不同尺寸的设备上都能…

张小明 2025/12/28 1:32:55 网站建设

建设网站的公司兴田德润在哪里做好网站功能性建设工作

LobeChat能否识别情绪变化?情感智能进阶 在AI助手日益渗透日常生活的今天,一个简单的“你好”背后可能藏着疲惫、焦虑或期待。用户不再满足于机械的问答——他们希望被理解,甚至被共情。尤其是在心理咨询初筛、客服情绪安抚、个性化教育辅导等…

张小明 2026/1/24 6:43:17 网站建设

免费建学校网站wordpress 整站音乐

从数据丢失焦虑到完整备份安心 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经担心过QQ空间里的珍贵回忆会随着时间流逝?那些记录着青春岁月的说说、照片和留言&a…

张小明 2026/1/6 6:48:11 网站建设

南昌做网站优化价格iis网站访问权限

Api前台页面之:首页 一、教程前言 本文聚焦于基于 FastAdmin 生态(兼容 Bootstrap 3 技术栈)搭建高并发 API 开放平台的前端首页开发,该页面定位为 API 平台的核心落地页,承担品牌展示、核心服务介绍、用户引导等核心…

张小明 2026/1/2 16:11:32 网站建设

易云巢做营销型网站天津老区建设促进会网站

文|白 鸽编|王一粟中国AI芯片市场,越来越热闹。12月初,摩尔线程成功登陆A股后,股价瞬间飙升,并在短短数日内,其股价一度突破900元/股大关,市值突破4000亿元大关。12月17日&#xf…

张小明 2025/12/28 16:41:47 网站建设