"错误:C2275:' QMouseEvent' :非法使用此类型作为表达式"

时间:2015-10-25 07:01:11

标签: c++ qt qmouseevent

'我目前正在尝试编译此程序。该程序应该在GUI QWidget上显示鼠标的坐标 错误发生在mainwindow.cpp文件的第6行'

//header
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QApplication>
#include <QMainWindow>
#include <QMouseEvent>
#include <QMessageBox>
#include <QWidget>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();

    void mouseReleaseEvent(QMouseEvent * event);

    ~MainWindow();

private:
    Ui::MainWindow *ui;

    QMessageBox *msgBox;
};

#endif // MAINWINDOW_H

&#39;     mainwindow.cpp文件&#39;

    #include "mainwindow.h"
    #include "ui_mainwindow.h"

MainWindow::MainWindow()
{
   MainWindow::mouseReleaseEvent (QMouseEvent * event);
}

void MainWindow::mouseReleaseEvent(QMouseEvent * event)
{
    msgBox = new QMessageBox();
    msgBox -> setWindowTitle("Coordinates");
    msgBox -> setText("You released the button");
    msgBox -> show();
}

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

&#39;的main.cpp&#39;

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow *w = new MainWindow();

    w->setWindowTitle(QString::fromUtf8("QT-capture mouse release"));
            w->resize(300, 250);


    w->show();

    return a.exec();
}

请帮助,我知道它与指针和可能的变异器有关,但我还没有看到它。谢谢。

1 个答案:

答案 0 :(得分:1)

这是非法的:

MainWindow::MainWindow()
{
    // illegal:
    MainWindow::mouseReleaseEvent (QMouseEvent * event);
}

如果您希望手动调用处理程序,则需要创建一个事件并将其传递:

MainWindow::MainWindow()
{
    QMouseEvent event;
    MainWindow::mouseReleaseEvent(&event);
}

但是你需要正确设置QMouseEvent属性/很难说明如何这样做而不知道为什么要这样做。

你正在那样做吗?这些事件在鼠标活动时自动发出,您不需要手动调用mouseReleaseEvent,当您释放鼠标按钮时将调用它。

如果你想显示鼠标位置,我建议你:

  • mouseReleaseEvent替换为mouseMoveEvent
  • 只需删除MainWindow::MainWindow()
  • 中的来电即可
  • MainWindow::mouseMoveEvent(QMouseEvent * event)在主窗口的标签中写入鼠标坐标而不是使用消息框(使用QString格式化带有鼠标坐标的QMouseEvent::pos并使用{{1更改标签文本}})

就像那样:

QLabel::setText