2010-11-21 6 views
1

Je peux ajouter un QPixMapImage à un QGraphicsScene, mais j'ai deux problèmes.Comment déplacer un QPixMapImage autour d'un qgraphicsview

D'abord je ne peux pas créer un pointeur vers mon QPixmapItem déclaré dans l'en-tête, où je peux avec QGraphicsScene.

Je reçois une erreur "erreur: pas de fonction correspondante pour l'appel à 'QGraphicsPixmapItem :: QGraphicsPixmapItem (MainWindow * const)" ... Quand je crée mon QGraphicsScene dans Main de la même manière?

Deuxième problème: je ne peux pas déplacer le QGraphicsPixmapItem lorsque le curseur est déplacé (obv je ne le ferai pas tant que le pointeur ne fonctionne pas). Mais puis-je même le déplacer, ou dois-je le repeindre?

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

} 

tête:

#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 

Répondre

0

Numéro 1:

erreur Il vous obtenez signifie qu'il n'y a pas de constructeur déclaré pour QGraphicsPixmapItem; vous utilisez l'un de ces:

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

Si je comprends bien votre question, vous voulez être en mesure de faire glisser vos éléments graphiques autour de la scène. Vous pouvez activer cette fonctionnalité en utilisant la méthode view->setDragMode.

S'il vous plaît voir si un exemple ci-dessous fonctionnerait pour vous:

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

espérons que cette aide, qui concerne

+0

Merci !!! serge – JohnStudio

+0

En fait, je voudrais déplacer le pixmap en déplaçant un curseur par opposition à un clic de souris ... savez-vous comment faire cela? – JohnStudio

+0

par "slider" voulez-vous dire un QSlider ou un autre? –

Questions connexes