-1

I'm trying to add ellipses to my Scene in Qt, but i get this error:

XXXXXX/mainwindow.cpp:20: error: ‘class mqlabel’ has no member named ‘setScene’ ui->imageLabel->setScene(scene);

and this one:

XXXXXX/build-MyPic-Desktop_Qt_5_10_1_GCC_64bit-Debug/ui_mainwindow.h:136: error: no matching function for call to ‘QGridLayout::addWidget(mqlabel*&, int, int, int, int)’ gridLayout_2->addWidget(imageLabel, 0, 0, 3, 1); ^

It's important to say that I promoted imageLabel (my scene in the .ui file) to mqlabel

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QGraphicsScene>
#include <QGraphicsItem>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsView>

namespace Ui {
class MainWindow;
}
//class MainWindow : public QGraphicsView
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    //explicit MainWindow(QGraphicsView *parent = 0);
    ~MainWindow();

private slots:
    void on_actionOpen_triggered();

    void on_actionExit_triggered();

    void mouse_pressed();

    void mouse_pos();
private:
    Ui::MainWindow *ui;
    QImage image;
    QGraphicsScene* scene;
    QGraphicsItem* item;
    QGraphicsEllipseItem *ellipse;
    QGraphicsView *view = new QGraphicsView(this);


};

#endif // MAINWINDOW_H

MainWIndow.cpp

#include <QtWidgets>

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <QGraphicsView>
#include <QGraphicsScene>
#include "mqlabel.h"
using namespace std;

//MainWindow::MainWindow(QGraphicsView *parent) :
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow){

    ui->setupUi(this);
    connect(ui->imageLabel, SIGNAL(mouse_pressed()),    this,SLOT(mouse_pressed()));
    connect(ui->imageLabel, SIGNAL(mouse_pos()), this,SLOT(mouse_pos()));
    scene = new QGraphicsScene();
    ui->imageLabel->setScene(scene);


}

MainWindow::~MainWindow(){
    delete ui;
    delete scene;
}

void MainWindow::on_actionOpen_triggered(){
    QFileDialog dialog(this, tr("Open File"));
    while (dialog.exec() == QDialog::Accepted &&     !loadFile(dialog.selectedFiles().first())) {}
}

void MainWindow::on_actionExit_triggered(){
   QCoreApplication::quit();
}

void MainWindow::mouse_pressed(){

    QPen outlinePen(Qt::black);
    QBrush greenBrush(Qt::NoBrush);

    ui->pos_x->setText(QString("X: %1 ").arg(ui->imageLabel->x));
    ui->pos_y->setText(QString("Y: %1 ").arg(ui->imageLabel->y));
    ui->lblMouse_Current_Event->setText("Mouse Pressed");
    QGraphicsEllipseItem *ellipse = scene->addEllipse(pos().x(),pos().y(), 300, 60, outlinePen, greenBrush);
}

void MainWindow::mouse_pos(){
    ui->lblMouse_Current_Event->setText("Mouse Moving");
    ui->pos_x->setText(QString("X: %1 ").arg(ui->imageLabel->x));
    ui->pos_y->setText(QString("Y: %1 ").arg(ui->imageLabel->y));
}

mqlabel.h

#ifndef MQLABEL_H
#define MQLABEL_H

#include <QWidget>
#include <QImage>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>

class mqlabel : public QGraphicsScene{
    Q_OBJECT

public:
    explicit mqlabel(QWidget *parent = 0);
    void mouseMoveEvent(QGraphicsSceneMouseEvent *move);
    void mousePressEvent(QGraphicsSceneMouseEvent *press);
    int x, y;

signals:
    void mouse_pressed();
    void mouse_pos();

public slots:

};

#endif // MQLABEL_H

mqlabel.cpp

#include "mqlabel.h"
#include <iostream>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsView>
#include <QMouseEvent>
using namespace std;

mqlabel::mqlabel(QWidget *parent) : QGraphicsScene(parent){

}

void mqlabel::mouseMoveEvent(QGraphicsSceneMouseEvent *move) {
    QGraphicsScene::mouseMoveEvent(move);
    this->x = move->pos.x();
    this->y = move->pos.y();
    emit mouse_pos();
}

void mqlabel::mousePressEvent(QGraphicsSceneMouseEvent *press){
    QGraphicsScene::mousePressEvent(press);
    this->x = press->pos.x();
    this->y = press->pos.y();
    emit mouse_pressed();
}
Josh Miles
  • 21
  • 1
  • 4

1 Answers1

0

Not entirely sure what you are trying to achieve here by wanting to set a scene for a graphicsscene object. But QGraphicsScene class does not actualy have any member called setScene. QGraphicsView has that method.