QGraphicsSceneMouseEvent 获取位置将不起作用
QGraphicsSceneMouseEvent get position will not work
我正在尝试制作一个带有 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!";
}
}
你快到了。
只需将 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));
我相信这可以解决您的问题。如果您还有任何问题,请回复。
确保您始终有一个父参数。没有它,您就不会告诉您的程序应该在何处添加您的小部件。
我正在尝试制作一个带有 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!";
}
}
你快到了。
只需将 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));
我相信这可以解决您的问题。如果您还有任何问题,请回复。
确保您始终有一个父参数。没有它,您就不会告诉您的程序应该在何处添加您的小部件。