Seite 1 von 1

Bildschirmlupe

Verfasst: 10. August 2009 12:36
von Neuling_
Hallo,

ich würde gerne eine Art Lupe als Feature für mein Programm schreiben.
Allerdings fehlen mir gerade ein paar Denkanstöße.

Ich habe ein QImage und möchte später, nachdem ich einen Button gedrückt habe, mit meiner Maus auf dem Bild einen Punkt festlegen.
Von diesem Punkt aus sollen dann zum Beispiel nach oben,unten, links und rechts 50 Pixel in einem seperatem Fenster größer angezeien lassen.

Ist

Code: Alles auswählen

QGraphicsView::scale(x,y)
dafür geeignet?
QGraphicsView verstehe ich bisher leider garnicht, deshalb wären Codeschnipsel ganz hilfreich.
Die Doku hat mir zu ::scale leider auch nicht so weiter geholfen.

Wie ich meinen Mauszeiger lokalisiere weiß ich auch noch nicht, vielleicht kann das jemand schnell von der Hand schreiben (ich hab schonmal zufällig Foreneinträge dazu gesehen, also da könnte ich mich noch informieren, blos wenn es schnell von der Hand geht... ;) )

Danke euch. :)



PS: Projekt wird mit Qt-Creator (2009.03) erstellt

Re: Bildschirmlupe

Verfasst: 11. August 2009 10:46
von neuschi
Neuling_ hat geschrieben:
QGraphicsView verstehe ich bisher leider garnicht, deshalb wären Codeschnipsel ganz hilfreich.
Guck mal hier:
http://labs.trolltech.com/blogs/2009/07 ... ing-glass/

\Ralf

Verfasst: 20. August 2009 08:17
von Neuling_
wow, ich glaube genau soetwas habe ich gesucht, danke!

So gut wie es aussieht, so kompliziert wirkt es gerade noch auf mich^^
Muss mich noch etwas mit den Codezeilen beschäftigen.

Gruß ;)

Verfasst: 26. August 2009 16:05
von Neuling_
hallo,

ich habe das Program jetzt etwas anderst geschrieben,

meine .ui hat 2 QScrollArea(1)(2) und einen QSlider

MainZoom.h

Code: Alles auswählen

...
class MainZoom : public QMainWindow
{
    Q_OBJECT

public:
    MainZoom(QWidget *parent = 0);
    ~MainZoom();

private:
    Ui::MainZoom *ui;

     QImage img;

private slots:
    void on_Slider_Zoom_sliderMoved(int position);
};
...

MainZoom.cpp

Code: Alles auswählen

...
MainZoom::MainZoom(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainZoom)
{
    ui->setupUi(this);

    QImage cimg("C:/img.bmp");
    img = cimg;

    QLabel *a = new QLabel();
    a->setPixmap(QPixmap::fromImage(MainZoom::img)); 

    ui->scrollArea1->setWidget(a);
    ui->scrollArea2->setWidget(a);    //hier wird das Bild später vergrößert dargestellt
}

void MainZoom::on_Slider_Zoom_sliderMoved(int position)
{
    QLabel *scaled = new QLabel();
    scaled->setPixmap(QPixmap::fromImage(MainZoom::img.scaledToHeight(img.size().width() - position, Qt::FastTransformation)));
     ui->scrollArea2->setWidget(scaled);  
}
Momentantes Problem:
Das skalieren des Bildes ist am Anfang noch sehr schleppend (da das ganze Bild geladen wird(denke ich)). Wie kann ich das verhindern?

Gruß

Verfasst: 9. September 2009 15:00
von Neuling_
push

Verfasst: 9. September 2009 17:07
von upsala
Skalier mal nur den Teil der auch momentan dargestellt wird. Am besten du nimmst ein QWidget und handelst das paintEvent selbst ab.