C++/Qt.Как работать с событиями?
Начал изучать qt. Слепил по кускам из инета такой код. mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPainter>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
protected:
void paintEvent(QPaintEvent*);
void mousePressEvent(QMouseEvent*);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QWidget>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
void MainWindow::paintEvent(QPaintEvent*)
{
QPainter painter(this); //настраиваем размеры и цвет эллипса и отрисовываем его
painter.setPen(QPen(QColor(79, 106, 25), 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin));
painter.setBrush(QColor(122, 163, 39));
painter.drawEllipse(290,480,40,40);
QPoint globalCursorPos = QCursor::pos(); //читаем глобальные координаты положения курсора и переводим в локальные
QPoint localCursorPos;
localCursorPos = QWidget::mapFromGlobal(globalCursorPos);
qreal x = localCursorPos.rx();
qreal y = localCursorPos.ry();
if ((x>290) && (x<340) && (y>480) && (y<530)) //если мышь навелась на заданную область, что затираем старый эллипс и рисуем новый
{
painter.eraseRect(290,480,60,60);
painter.drawEllipse(350,420,40,40);
}
update();
}
void MainWindow::mousePressEvent(QMouseEvent*)
{
qDebug() << "Mouse pressed";
}
MainWindow::~MainWindow()
{
delete ui;
}
При наведении мыши на область эллипс переходит из одной области в другую на главном окне.
Собственно, вопрос в заголовке. Я не понимаю как работать с событиями.
Почему для того, что бы нарисовать эллипс мы записываем QPaintEvent* как параметр функции paintEvent? Чем по сути является QPaintEvent*? Это объект типа QPaintEvent переданный по ссылке? Тогда где название объекта?
Ответы (1 шт):
Почему для того, что бы нарисовать эллипс мы записываем QPaintEvent* как параметр функции paintEvent?
Этот объект создается перед отрисовкой, данного виджета
Чем по сути является QPaintEvent*?
Указатель на объект события отрисовки, который (объект) хранит в себе всю информацию, необходимую для отрисовки всего, что вы видите в вашем приложении (размеры и другие параметры).
Это объект типа QPaintEvent переданный по ссылке? Тогда где название объекта?
Это указатель на объект типа QPaintEvent. Если вы его не используете, то имя переменной - фактического параметра метода (типа указатель) можно и не указывать.
- Замечение на счет вызова update() в конце метода абсолютно правильное