关于QGraphicsObject类的一个诡异问题

a835941119 a835941119 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我自写了一个类ClockHand,父类是QGraphicsObject。
paint()函数里画了两个矩形,但是它们的形状却出乎意料,请大神指教!
clockhand.h
#ifndef CLOCKHAND_H
#define CLOCKHAND_H

#include <QGraphicsObject>

class ClockHand : public QGraphicsObject
{
public:
explicit ClockHand();
public:
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
protected:
void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
void dropEvent(QGraphicsSceneDragDropEvent *event);
private:
QColor color;
bool dropOver;
//QPoint *shape;
};

#endif // CLOCKHAND_H


clockhand.cpp
#include "clockhand.h"
#include <QtGui>


ClockHand::ClockHand() : color(Qt::white),dropOver(false)
{
setAcceptDrops(true);
}

QRectF ClockHand::boundingRect() const
{
return QRectF(-21,-66,21,6);
}

void ClockHand::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
painter->setRenderHint(QPainter::Antialiasing);
painter->setBrush(dropOver ? color.light(140) : color);
painter->drawRect(-9,-9,25,25);
painter->drawRect(-20,-65,20,5);
}

void ClockHand::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
if(event->mimeData()->hasColor())
{
event->setAccepted(true);
dropOver = true;
update();
}
else
{
event->setAccepted(false);
}
}

void ClockHand::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
{
Q_UNUSED(event);
dropOver = false;
update();
}

void ClockHand::dropEvent(QGraphicsSceneDragDropEvent *event)
{
dropOver = false;
if(event->mimeData()->hasColor())
color = qvariant_cast<QColor>(event->mimeData()->colorData());

update();
}

main.cpp
#include "coloritem.h"
#include <QApplication>
#include "coloritem.h"
#include "clock.h"
#include <QtGui>
#include "clockhand.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

QGraphicsScene *scene = new QGraphicsScene(-500,-500,1000,1000);
// ColorItem *c1=new ColorItem;
// ColorItem *c2=new ColorItem;
// c1->setPos(60,40);
// c2->setPos(80,40);
// Clock *clock = new Clock;
// clock->setPos(200,200);
// QPoint secPolygon[4] = {QPoint(0,5),QPoint(-20,-15),QPoint(0,-65),QPoint(20,-15)};
ClockHand *secHand = new ClockHand();
secHand->setPos(-100,0);
// scene->addItem(c1);
// scene->addItem(c2);
// scene->addItem(clock);
scene->addItem(secHand);

QGraphicsView view(scene);
view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
view.show();

return a.exec();
}


结果:
大的矩形是:painter->drawRect(-9,-9,25,25);
小的矩形是:painter->drawRect(-20,-65,20,5);
为什么会这样?
...全文

相关推荐

国央企创新负责人如何构建面向核心技术攻关的多维创新资源协同机制?.docx

国央企创新负责人如何构建面向核心技术攻关的多维创新资源协同机制?

BIZKEEN

科技中介服务机构如何提升技术对接服务的专业性与效率?.docx

科技中介服务机构如何提升技术对接服务的专业性与效率?

BIZKEEN

政府科技管理者在推动区域科技成果转化时,如何提升科技成果与产业需求的对接精准度?.docx

政府科技管理者在推动区域科技成果转化时,如何提升科技成果与产业需求的对接精准度?

BIZKEEN

科技中介服务机构在为企业提供技术对接服务时,如何提升全流程服务的智能化水平?.docx

科技中介服务机构在为企业提供技术对接服务时,如何提升全流程服务的智能化水平?

BIZKEEN

无功优化基于多目标差分进化算法的含DG配电网无功优化模型【IEEE33节点】(Matlab代码实现)

内容概要:本文研究了基于多目标差分进化算法的含分布式电源(DG)配电网无功优化模型,以IEEE33节点系统为仿真平台,旨在应对DG接入后引发的电压波动加剧与网络损耗上升等关键问题。通过构建综合考虑有功网损最小化、电压偏差最小化等多重目标的优化模型,并融入节点电压、支路电流及无功补偿容量等多种运行约束,采用多目标差分进化算法(MODE)进行高效求解,实现了对无功补偿设备出力与DG无功调节能力的协同优化。文中系统阐述了算法的数学原理、模型的构建逻辑及详细的仿真设置,并通过与其他优化方法的对比分析,充分验证了所提方案在提升电压质量、降低网络损耗及增强系统运行经济性与稳定性方面的优越性。; 适合人群:具备电力系统分析、优化理论及Matlab编程基础,从事配电网运行控制、分布式能源并网技术、智能电网优化调度等相关领域的科研人员、工程技术人员及高年级研究生。; 使用场景及目标:①应用于高比例DG渗透的现代配电网无功电压优化调度,有效提升系统运行的安全性与经济性;②为相关领域研究人员提供一套完整的、基于多目标进化算法解决复杂电力系统多目标优化问题的Matlab代码实现范例,便于直接复现、验证与二次开发;③作为高校相关课程的教学案例,用于演示先进优化算法在电力系统中的具体应用。; 阅读建议:建议读者结合文中详尽的理论推导与提供的Matlab代码,仔细复现仿真结果,深入理解多目标优化问题的建模思路、Pareto最优解集的概念以及差分进化算法在处理复杂约束条件下的具体实现技巧,并可尝试将该模型拓展至其他标准测试系统或引入更多的优化目标与约束条件以进行深入研究。

荔枝科研社
评论 3
收藏 已收藏
分享
返回顶部
a835941119
Qt 21,503 成员 26,693 内容