«У меня сейчас проблема с попыткой скомпилировать эту программу. Программа должна показывать координаты мыши на графическом интерфейсе 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();
}
Пожалуйста, помогите, я знаю, что это связано с указателями и, возможно, мутаторами, но я пока не вижу этого. Спасибо.
Это незаконно:
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() );
}
Других решений пока нет …