Bildschirmlupe

Alles rund um die Programmierung mit Qt
Antworten
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Bildschirmlupe

Beitrag 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
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Bildschirmlupe

Beitrag 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
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Beitrag 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ß ;)
Qt 2009.05
Entw.-umgebung Qt-Creator
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Beitrag 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ß
Qt 2009.05
Entw.-umgebung Qt-Creator
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Beitrag von Neuling_ »

push
Qt 2009.05
Entw.-umgebung Qt-Creator
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Skalier mal nur den Teil der auch momentan dargestellt wird. Am besten du nimmst ein QWidget und handelst das paintEvent selbst ab.
Antworten