& quot; ошибка: C2275: ‘QMouseEvent’: незаконное использование этого типа в качестве выражения & quot;

«У меня сейчас проблема с попыткой скомпилировать эту программу. Программа должна показывать координаты мыши на графическом интерфейсе QWidget
Ошибка находится в строке 6 файла mainwindow.cpp ‘

//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


файл mainwindow.cpp ‘

    #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;
}

‘Main.cpp’

#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

Решение

Это незаконно:

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 и изменение текста метки с помощью QLabel::setText)

Как это:

void MainWindow::mouseMoveEvent(QMouseEvent * event)
{
std::stringstream str;
str << "Mouse position is " << event->pos.x() << ";" << event->pos().y();
ui->label->setText( str.str().c_str() );
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]