¿Cómo puedo mover una imagen PixMap alrededor de un QGraphicsView
-
26-09-2019 - |
Pregunta
Me puede añadir un QPixMapImage a un QGraphicsScene, pero luego tengo dos problemas.
En primer lugar, no se puede crear un puntero a mi QPixmapItem declaró en la cabecera, en el que puedo con QGraphicsScene.
me sale un "error: ninguna función coincidente para la llamada a 'QGraphicsPixmapItem :: QGraphicsPixmapItem (MainWindow * const)" error? ... Cuando creo mi QGraphicsScene principal de la misma manera
Segundo problema: No puedo mover el QGraphicsPixmapItem alrededor cuando se desplaza el cursor (OBV no lo haré hasta que el puntero está funcionando). Pero aun puedo moverlo, o tengo que volver a pintar?
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
#include <QGraphicsView>
#include <QGraphicsPixmapItem>
#include <QPixmap>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene(this);
QPixmap arrow = QPixmap::fromImage(QImage("ARROW.png"));
arrowItem = new QGraphicsPixmapItem(this);
arrowItem->setPixmap(arrow);
ui->graphicsView->setScene(scene);
ui->horizontalSlider->setMaximum(2000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_horizontalSlider_sliderMoved(int position)
{
arrowItem->setPos(position,position);
scene->addItem(arrowItem);
}
encabezado:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGraphicsPixmapItem>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QGraphicsPixmapItem *arrowItem;
QGraphicsScene *scene;
private slots:
void on_horizontalSlider_sliderMoved(int position);
};
#endif // MAINWINDOW_H
Solución
Edición # 1:
Hay error que significa conseguir que no hay tal constructor declarado para QGraphicsPixmapItem; utilización de cualquiera de los siguientes:
QGraphicsPixmapItem(QGraphicsItem *parent = 0
#ifndef Q_QDOC
// ### obsolete argument
, QGraphicsScene *scene = 0
#endif
);
QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent = 0
#ifndef Q_QDOC
// ### obsolete argument
, QGraphicsScene *scene = 0
#endif
);
Edición # 2
Si he entendido bien su pregunta usted quiere ser capaz de arrastrar los elementos gráficos alrededor de la escena. Puede cambiar esta funcionalidad en mediante el uso de Ver-> setDragMode método .
Por favor, ver si un ejemplo a continuación iba a funcionar para usted:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsScene* scene = new QGraphicsScene(QRect(-50, -50, 400, 200));
QPixmap image = QPixmap::fromImage(QImage("image.JPG"));
QGraphicsPixmapItem* pixMapItem = new QGraphicsPixmapItem();
pixMapItem->setPixmap(image);
scene->addItem(pixMapItem);
QGraphicsView* view = new QGraphicsView(ui->centralWidget);
view->setScene(scene);
view->setGeometry(QRect(50, 50, 400, 200));
view->setDragMode(QGraphicsView::ScrollHandDrag);
view->show();
}
Espero que esta ayuda, respecto