C++ QGraphicsView';s MousePressEvent未被调用

C++ QGraphicsView';s MousePressEvent未被调用,c++,qt,qt5,qgraphicsview,C++,Qt,Qt5,Qgraphicsview,在最近的一个项目中,我尝试在单击GraphicsView中的相应位置后在场景上绘制点,但什么都没有发生。我跟踪了错误,找到了一个缺少的调用ClickableMap::mousePressEvent(constqmouseevent&) 在这个最小的示例中,鼠标单击白色小部件后不会打印任何内容,但应该打印一条消息。如果需要,我会将图像加载到场景中 这里出了什么问题?非常感谢 ClickableMap.h: \ifndef clickable映射 #定义可点击地图 #包括 #包括 #包括 类Clic

在最近的一个项目中,我尝试在单击GraphicsView中的相应位置后在场景上绘制点,但什么都没有发生。我跟踪了错误,找到了一个缺少的调用
ClickableMap::mousePressEvent(constqmouseevent&)

在这个最小的示例中,鼠标单击白色小部件后不会打印任何内容,但应该打印一条消息。如果需要,我会将图像加载到场景中

这里出了什么问题?非常感谢

ClickableMap.h:

\ifndef clickable映射
#定义可点击地图
#包括
#包括
#包括
类ClickableMap:PublicQGraphicsView{
Q_对象
公众:
使用QGraceCsVIEW::QGraceCsVIEW;//SEIT C++ 11,B-O.TIGT WIRD最小化GCC 4.8
//Destruktor entfällt,da argumentlos
void mousePressEvent(const QMouseEvent&event);
信号:
鼠标按下无效(常数点&);
};
#endif//CLICKABLEMAP\u H
MainWindow.h:

\ifndef主窗口
#定义主窗口
#包括
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
私人:
Ui::MainWindow*Ui;
公众时段:
void erster_klick(const QPoint&punkt);
};
#endif//main窗口
ClickableMap.cpp:

#包括
#包括
#包括“ClickableMap.h”
#包括
#包括
void ClickableMap::mousePressEvent(const QMouseEvent&event){
常量QPoint&punkt=event.pos();
qDebug()setupUi(此);
连接(ui->graphicsView,&ClickableMap::mousePressed,this,erster_klick);
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void主窗口::erster_klick(const QPoint和punkt){

qDebug()当重写父方法时,必须按照写入父方法的方式复制名称,如下所示:

也就是说,它作为参数接收指针而不是引用,在您的情况下,必须进行以下更改:

*.h

void mousePressEvent(QMouseEvent *event);
*.cpp

void ClickableMap::mousePressEvent(QMouseEvent *event){
    const QPoint& punkt = event->pos();
    qDebug() << "Maus gepresst";
    QMessageBox::information(this, tr("Dialog"), "Detected click in Drawspace");
    emit mousePressed(punkt);
}
致:


除了比较函数签名的严格方法外,还有什么原因不支持我的版本吗?即使在主窗口构造函数本身中也需要&MainWindow::前缀吗?如果需要,原因是什么?“connect(button,&QPushButton::clicked,this,verschiebe);”在构造函数中的另一段代码中可以完美地工作。(使用“void MainWindow::verschiebe(QPoint)”时,我很惊讶它能工作,当我使用您的连接表单时,我得到了以下错误:/home/qhipa/test/MainWindow.cpp:12:错误:无效使用非静态成员函数“void MainWindow::erster_klick(const QPoint)&”connect(ui->graphicsView,&ClickableMap::mousePressed,this,erster_klick);@user7427029如果我的答案对您有帮助,请将我的答案标记为正确。
void ClickableMap::mousePressEvent(QMouseEvent *event){
    const QPoint& punkt = event->pos();
    qDebug() << "Maus gepresst";
    QMessageBox::information(this, tr("Dialog"), "Detected click in Drawspace");
    emit mousePressed(punkt);
}
connect(ui->graphicsView, &ClickableMap::mousePressed, this, erster_klick);
connect(ui->graphicsView, &ClickableMap::mousePressed, this, &MainWindow::erster_klick);