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();
}