Как мне переместить QPixMapImage вокруг qgraphicsview - PullRequest
1 голос
/ 21 ноября 2010

Я могу добавить QPixMapImage к QGraphicsScene, но затем у меня две проблемы.

Сначала я не могу создать указатель на мой QPixmapItem, объявленный в заголовке, где я могу с QGraphicsScene.

Я получаю сообщение об ошибке "ошибка: нет соответствующей функции для вызова 'QGraphicsPixmapItem :: QGraphicsPixmapItem (MainWindow * const)" ... Когда я создаю свой QGraphicsScene в Main таким же образом?

Вторая проблема: я не могуперемещайте QGraphicsPixmapItem при перемещении ползунка (очевидно, я не буду, пока не будет работать указатель).Но я могу даже переместить это, или я должен перекрасить это?

#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);

}

Заголовок:

#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

1 Ответ

0 голосов
/ 21 ноября 2010

Issue # 1:

Полученная ошибка означает, что такой конструктор не объявлен для QGraphicsPixmapItem;Вы используете один из них:

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

Issue # 2

Если я правильно понял ваш вопрос, вы захотите перетаскивать графические элементы по сцене.Вы можете включить эту функцию, используя метод view-> setDragMode .

Пожалуйста, посмотрите, подойдет ли вам приведенный ниже пример:

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

надеюсь, это поможет, с уважением

...