Why numerator function doesn't work?
-
wrote on 28 Apr 2021, 11:37 last edited by ddryomyss
This program should add enumerated points on screen on every left button press. Points are ellipses painted on the scene, numbering should be done by new labels creation.
mainwindow.h:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> #include <QTimer> #include <QResizeEvent> #include <paintscene.h> //QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } //QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); void numerator(int num, qreal x, qreal y); private: Ui::MainWindow *ui; QTimer *timer; paintScene *scene; void resizeEvent(QResizeEvent * event); int j = 1; bool ind = true; private slots: void slotTimer(); }; #endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); scene = new paintScene(); ui->graphicsView->setScene(scene); timer = new QTimer(); connect(timer, &QTimer::timeout, this, &MainWindow::slotTimer); timer->start(100); } MainWindow::~MainWindow() { delete ui; } void MainWindow::numerator(int num, qreal x, qreal y) { QLabel *label = new QLabel(this); label->setText(QString("%1").arg(num)); label->setGeometry(x+10,y-20,20,20); label->show(); } void MainWindow::slotTimer() { timer->stop(); scene->setSceneRect(0,0, ui->graphicsView->width() - 20, ui->graphicsView->height() - 20); } void MainWindow::resizeEvent(QResizeEvent *event) { timer->start(100); QWidget::resizeEvent(event); }
paintscene.h
#ifndef PAINTSCENE_H #define PAINTSCENE_H #include <QGraphicsScene> #include <QGraphicsSceneMouseEvent> #include <QTimer> #include <QLabel> class paintScene : public QGraphicsScene { Q_OBJECT public: paintScene(QObject *parent = 0); ~paintScene(); void addPoint(qreal x, qreal y); private: void mousePressEvent(QGraphicsSceneMouseEvent * event); QVector<qreal> coord_x, coord_y, distances; bool ind = true; const qreal rad = 5.0; qreal last_pt_x, last_pt_y; int i = 1; }; #endif // PAINTSCENE_H
paintscene.cpp
#include "paintscene.h" #include "mainwindow.h" #include "ui_mainwindow.h" //#include <QLabel> paintScene::paintScene(QObject *parent) : QGraphicsScene(parent) { } paintScene::~paintScene() { } void paintScene::addPoint(qreal x, qreal y) { coord_x.push_back(x); coord_y.push_back(y); } void paintScene::mousePressEvent(QGraphicsSceneMouseEvent *event) { MainWindow mw; if (event->button() == Qt::LeftButton && ind == true) { addEllipse(event->scenePos().x() - rad, event->scenePos().y() - rad, 2*rad, 2*rad, QPen(Qt::NoPen), QBrush(Qt::red)); mw.numerator(i,event->scenePos().x(), event->scenePos().y()); ++i; addPoint(event->scenePos().x(), event->scenePos().y()); } else if (event->button() == Qt::RightButton && ind == true) { addEllipse(event->scenePos().x() - rad, event->scenePos().y() - rad, 2*rad, 2*rad, QPen(Qt::NoPen), QBrush(Qt::black)); ind = false; last_pt_x = event->scenePos().x(); last_pt_y = event->scenePos().y(); } }
-
@ddryomyss said in Why numerator function doesn't work?:
please read up on the c++ basics, about object instances, scopes, heap and stack
because this
void paintScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
MainWindow mw;is != to
to the MainWindow that you have inside main.cpp and that you actually show.
1/2