2010-11-21 14 views
1

Ich kann ein QPixMapImage zu einem QGraphicsScene hinzufügen, aber dann habe ich zwei Probleme.Wie verschiebe ich ein QPixMapImage um eine qgraphicsview

Erstens kann ich keinen Zeiger auf mein QPixmapItem in der Kopfzeile, wo ich mit QGraphicsScene deklariert werden kann.

Ich bekomme einen Fehler "Fehler: keine passende Funktion für den Aufruf von 'QGraphicsPixmapItem :: QGraphicsPixmapItem (MainWindow * const)" ... Wenn ich meine QGraphicsScene in Main auf die gleiche Weise erstellen?

Zweiter Fehler: Ich kann das QGraphicsPixmapItem nicht verschieben, wenn der Schieberegler bewegt wird (ob ich nicht, bis der Zeiger funktioniert). Aber kann ich es sogar bewegen, oder muss ich es neu streichen?

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

} 

Rubrik:

#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 

Antwort

0

Ausgabe # 1:

irrtümlicher sind Sie bedeutet, dass man es nicht so Konstruktor für QGraphicsPixmapItem erklärt ist; Sie verwenden entweder eine davon:

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

Wenn ich Ihre Frage richtig verstanden Sie Ihre Grafik Artikel in der Lage sein wollen, um die Szene zu ziehen. Sie können diese Funktionalität mit der Methode view->setDragMode aktivieren.

Bitte sehen, ob ein Beispiel unten für Sie arbeiten würde:

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

hoffe, das hilft, sieht

+0

Dank serge !!! – JohnStudio

+0

Eigentlich möchte ich die Pixmap verschieben, indem ich einen Schieberegler im Gegensatz zu einem Mausklick verschiebe ... Weißt du wie das geht? – JohnStudio

+0

von "slider" meinst du einen QSlider oder etw sonst? –

Verwandte Themen