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
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top