'我目前正在尝试编译此程序。该程序应该在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();
}
请帮助,我知道它与指针和可能的变异器有关,但我还没有看到它。谢谢。
答案 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