Wyświetlanie obrazka w QGraphicsView

0

Witam

Proszę o prosty kod wyświetlania obrazka w formacie jpg,gig,png w QGraphicsView.

Przejrzałem wczoraj dokumentację i nie znalazłem odpowiedniego przykładu. No chyba że coś przeoczyłem.

Serdecznie Pozdrawiam
Grześ

0

coś kiepsko szukasz ;)

#include <QtGui/QApplication>
#include <QGraphicsView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGraphicsView graphicsView;
    QGraphicsScene scene(&graphicsView);
    QPixmap pix("example.jpg");

    graphicsView.resize(QSize(pix.width(), pix.height()));
    scene.setSceneRect(graphicsView.rect());
    graphicsView.setScene(&scene);
    scene.addPixmap(pix);
    graphicsView.show();

    return a.exec();
}
0

dziękuje za podpowiedz

serdecznie pozdrawiam
Grześ

0

Witam

Mam jeszcze jedno pytanie:

Do formularza dodałem dwa qlabel i chciałbym że po najechaniu na obrazka myszką w qlabel były wyświetlane współrzędne obrazka.
Zastanawiam czy to nie funkcja mouseMoveEvent

Poniżej podaję fragment kodu:

#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QDebug>
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->actionOtworz, SIGNAL(triggered()), this, SLOT(WczytajZdjecie_clicked()));
    connect(ui->actionZakoncz, SIGNAL(triggered()), this, SLOT(Zakoncz_clicked()));
    connect(ui->actionO_programie, SIGNAL(triggered()), this, SLOT(OProgramie_clicked()));
}

void MainWindow::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
    if (e->button() != Qt::LeftButton)
        return;
}

void MainWindow::WczytajZdjecie_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,"","","Dopuszczalne formaty (*.jpg)");
    QGraphicsScene *scene = new QGraphicsScene();
    QPixmap pix;
    pix.load(fileName);
    scene->addPixmap(pix);
    this->ui->graphicsView->setScene(scene);
    this->ui->graphicsView->show();
    this->ui->labelSzerokosc->setText(QString::number(pix.width()));
    this->ui->labelWysokosc->setText(QString::number(pix.height()));
}

void MainWindow::Zakoncz_clicked()
{
    QApplication::closeAllWindows();
}

MainWindow::~MainWindow()
{
    delete ui;
}
 

Serdecznie pozdrawiam
Grześ

0

MouseMoveEvent,owszem,ale nie mainwindowa,a QGraphicsItemu:
http://doc.qt.nokia.com/4.7-snapshot/qgraphicsitem.html#mouseMoveEvent

0

[Edit]
Można też przy pomocy QGraphicsItem::hoverMoveEvent()
http://doc.qt.nokia.com/latest/qgraphicsitem.html#hoverMoveEvent

0

Dziękuje za podpowiedzi.

Wczoraj wieczorem analizowałem przykład w dokumentacji Qt - Chip (http://doc.qt.nokia.com/4.7/demos-chip.html).

I prawie wszystko mam.

Tylko mam jeszcze jedno pytanie:
W classie chip (http://doc.qt.nokia.com/4.7/demos-chip-chip-cpp.html) jest funkcja

void Chip::mousePressEvent(QGraphicsSceneMouseEvent *event)

i przerobiłem ją na tak:

 void Chip::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    QGraphicsItem::mousePressEvent(event);
    a = event->pos().x();

   qDebug()<<a;

}

i z niej chcę żeby współrzędne były wypisanie w Qlabel
np w klasie View http://doc.qt.nokia.com/4.7/demos-chip-view-cpp.html
label = new QLabel(name);

Jak to zrobić.

Serdecznie Pozdrawiam
Grześ

0

w tej chwili masz problem z programowaniem obiektowym, może za wcześnie na qt? Możesz umieścić dwa pola w klasie określające współrzędne i potem przez obiekt tej klasy wydobyć ich wartości, bądź za pomocą sygnałów i slotów.

0

1.Stwórz sobie nową klasę dziedziczącą po QObject mającą sygnał wyślijDaneDoQLabela(jakieś parametry)
2.Niech ten Twój Chip ma jako składnik obiekt powyżej wspomnianej klasy
3.Stwórz gdzieś slot odbierający sygnał wyślijDaneDoQLabela(jakieś parametry)-czy to przeimplementowując QLabela,czy główne okno programu
4.Tworząc obiekt Chip zarazem zrób podłączenie Chip.connectorObject,SIGNAL(wyślijDaneDoQLabela(jakieś parametry)) z tymże slotem

1 użytkowników online, w tym zalogowanych: 0, gości: 1