QGraphicsView/Scene - 项目绘制距离鼠标点击 2 倍
QGraphicsView/Scene - items are drawn 2x away from mouse click
我一直在尝试使用图形视图框架在我单击的地方绘制节点。但是,我无法正确定位。
发生这种情况:我点击黄色点,节点出现在那里
所以这是 mainwindow.cpp 的代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow) {
scene = new GraphScene(this);
ui->setupUi(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->setSceneRect(ui->graphicsView->rect());
ui->graphicsView->setFrameStyle(0);
ui->graphicsView->show();
}
自定义场景mousePressEvent:
void GraphScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
if (!this->itemAt(event->scenePos(), QTransform())){
this->addItem(new NodeItem(event->scenePos()));
this->update();
}
}
节点项目:
NodeItem::NodeItem(QPointF position) {
this->setPos(position) ;
}
void NodeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
painter->drawEllipse(pos(), 30.0, 30.0);
}
QRectF NodeItem::boundingRect() const{
return QRectF(pos(), QSizeF(30,30));
}
我已经尽力修复了,但是我卡了一段时间无法修复。我将不胜感激任何帮助。
QGraphicsView
和 QGraphicsScene
处理不同的坐标系,在 boundingRect()
和 paint()
方法的情况下,它们必须在相对于项目和您的本地坐标系中执行不应使用 pos()
方法,因为它指的是相对于场景的坐标。
void NodeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/){
painter->drawEllipse(boundingRect());
}
QRectF NodeItem::boundingRect() const{
return QRectF(QPointF(-15, -15), QSizeF(30,30));
}
我一直在尝试使用图形视图框架在我单击的地方绘制节点。但是,我无法正确定位。
发生这种情况:我点击黄色点,节点出现在那里
所以这是 mainwindow.cpp 的代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow) {
scene = new GraphScene(this);
ui->setupUi(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->setSceneRect(ui->graphicsView->rect());
ui->graphicsView->setFrameStyle(0);
ui->graphicsView->show();
}
自定义场景mousePressEvent:
void GraphScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
if (!this->itemAt(event->scenePos(), QTransform())){
this->addItem(new NodeItem(event->scenePos()));
this->update();
}
}
节点项目:
NodeItem::NodeItem(QPointF position) {
this->setPos(position) ;
}
void NodeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
painter->drawEllipse(pos(), 30.0, 30.0);
}
QRectF NodeItem::boundingRect() const{
return QRectF(pos(), QSizeF(30,30));
}
我已经尽力修复了,但是我卡了一段时间无法修复。我将不胜感激任何帮助。
QGraphicsView
和 QGraphicsScene
处理不同的坐标系,在 boundingRect()
和 paint()
方法的情况下,它们必须在相对于项目和您的本地坐标系中执行不应使用 pos()
方法,因为它指的是相对于场景的坐标。
void NodeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/){
painter->drawEllipse(boundingRect());
}
QRectF NodeItem::boundingRect() const{
return QRectF(QPointF(-15, -15), QSizeF(30,30));
}