QGraphicsSceneMouseEvent获取位置将不起作用[重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

我正在尝试制作一个带有QGraphicsView的应用程序。当试图用QGraphicsSceneMouseEvent按下鼠标时,我试图获取鼠标的位置,但是它似乎不起作用。当我按下鼠标时,不会调用整个功能。

我想制作一个可以将图像加载到QGraphicsView中的应用程序,然后当您按下鼠标按钮时,它应该添加一个小圆圈。

这是我的代码:

dialog.cpp:

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    ui->graphicsView = new GraphicsView();
}

Dialog::~Dialog()
{
    delete ui;
}

graphicsview.h:

#ifndef GRAPHICSVIEW_H
#define GRAPHICSVIEW_H
#include <QGraphicsView>
#include <QMouseEvent>
#include <QDebug>

class GraphicsView : public QGraphicsView
{
public:
    GraphicsView();
protected:
    void mousePressEvent(QMouseEvent *event) override;

private:
    QGraphicsScene *scene;
};

#endif // GRAPHICSVIEW_H

graphicsview.cpp:

#include "graphicsview.h"

GraphicsView::GraphicsView()
{
    scene = new QGraphicsScene();
    this->setScene(scene);
}

void GraphicsView::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        qDebug() << "The left button was pressed!";
    }
}
qt qgraphicsview qgraphicsscene
1个回答
0
投票

您快到了。

只需将GraphicsView::GraphicsView()更改为:

GraphicsView::GraphicsView(QWidget *parent=nullptr) : QGraphicsView(parent) {}

并将ui->graphicsView = new GraphicsView();更改为

QVBoxLayout *verticalLayout = new QVBoxLayout(this);
verticalLayout->addWidget(new GraphicsView(this));

这将使图形视图成为对话框的父级。添加上面的代码时,请确保对话框中没有任何内容。或者,您可以在dialog.ui文件的对话框中添加垂直布局,然后执行

ui->verticalLayout->addWidget(new GraphicsView(this));

我相信可以解决您的问题。如果您仍然有任何问题,请回复。

请确保您始终有一个父参数。没有它,您不会告诉程序应该在何处添加窗口小部件。

© www.soinside.com 2019 - 2024. All rights reserved.