【问题标题】:mousePressEvent is working but mouseMoveEvent isn'tmousePressEvent 正在工作,但 mouseMoveEvent 没有
【发布时间】:2016-05-12 01:33:06
【问题描述】:

这两个事件在裸 mainWindow 上都可以正常工作,但是当我按下位于 mainWindow 内的 graphicsView 时,只有 mousePressEvent 响应。

有人可以澄清这个问题吗?

UPD:这是代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mydialog.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);

    pix = new QPixmap("/Users/mac/Pictures/wallpaper/Rocks.jpg");
    scene->addPixmap(*pix);
}

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

void MainWindow::mousePressEvent(QMouseEvent *e)
{
    sel_reg_beg_x = e->x();
    sel_reg_beg_y = e->y();
    qDebug() << "inside press";
}

void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
    qDebug() << "inside move";
    sel_reg_end_x = e->x();
    sel_reg_end_y = e->y();
    this->update();

}

【问题讨论】:

  • 是的,它已在 UI 中启用
  • 试试setMouseTracking(true)

标签: c++ qt user-interface qgraphicsview


【解决方案1】:

你有两个选择:

  1. QGraphicsView 派生您自己的图形视图并在那里实现鼠标移动事件处理程序。

  2. 创建事件过滤器并将其安装到 QGraphicsView 的视口 (ui-&gt;graphicsView-&gt;viewport()-&gt;installEventFilter(...))。请参阅QObject::eventFilter() 文档。

当然,您还必须为 QGraphicsView 的视口启用鼠标跟踪:

ui->graphicsView->viewport()->setMouseTracking(true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    相关资源
    最近更新 更多