16,213
社区成员
发帖
与我相关
我的任务
分享
#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
#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();
}
#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();
}