#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
#include <QGraphicsLineItem>
public:
setRect(-5,-5,10,10);
setFlag(ItemIsMovable);
pen.setWidth(2);
pen.setColor(Qt::red);
setPen(pen);
m_line = 0;
}
protected:
if(m_line){
if(oldPos==p1){
p1 = value.toPointF();
} else if(oldPos==p2){
p2 = value.toPointF();
} else return value;
m_line
->setLine
(QLineF(p1,p2
));
}
}
private:
};
int main(int argc, char **argv){
view.
setRenderHints(QPainter::Antialiasing);
DotItem *i1 = new DotItem;
DotItem *i2 = new DotItem;
line
->setLine
(QLineF(p1, p2
));
pen.setStyle(Qt::DashDotLine);
pen.setWidth(2);
line->setPen(pen);
view.scene()->addItem(line);
i1->setPos(p1); i2->setPos(p2);
view.scene()->addItem(i1); view.scene()->addItem(i2);
i1->setLine(line); i2->setLine(line);
view.show();
return app.exec();
}
#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
#include <QGraphicsLineItem>
class DotItem : public QGraphicsEllipseItem {
public:
DotItem() : QGraphicsEllipseItem(){
setRect(-5,-5,10,10);
setFlag(ItemIsMovable);
QPen pen;
pen.setWidth(2);
pen.setColor(Qt::red);
setPen(pen);
m_line = 0;
}
void setLine(QGraphicsLineItem *l){ m_line = l; }
protected:
QVariant itemChange ( GraphicsItemChange change, const QVariant & value ){
if(m_line){
QLineF l = m_line->line();
QPointF oldPos = pos();
QPointF p1 = l.p1();
QPointF p2 = l.p2();
if(oldPos==p1){
p1 = value.toPointF();
} else if(oldPos==p2){
p2 = value.toPointF();
} else return value;
m_line->setLine(QLineF(p1,p2));
}
return QGraphicsEllipseItem::itemChange(change, value);
}
private:
QGraphicsLineItem *m_line;
};
int main(int argc, char **argv){
QApplication app(argc, argv);
QGraphicsView view;
view.setScene(new QGraphicsScene(QRectF(-512, -512, 1024, 1024), &view));
view.setRenderHints(QPainter::Antialiasing);
DotItem *i1 = new DotItem;
DotItem *i2 = new DotItem;
QGraphicsLineItem *line = new QGraphicsLineItem;
QPointF p1(-212, 212);
QPointF p2(212, -212);
line->setLine(QLineF(p1, p2));
QPen pen;
pen.setStyle(Qt::DashDotLine);
pen.setWidth(2);
line->setPen(pen);
view.scene()->addItem(line);
i1->setPos(p1); i2->setPos(p2);
view.scene()->addItem(i1); view.scene()->addItem(i2);
i1->setLine(line); i2->setLine(line);
view.show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks