QGraphicsItem: Unterscheidung in paint() Drucker/Bildschirm?

Alles rund um die Programmierung mit Qt
Antworten
mikemc
Beiträge: 42
Registriert: 11. Februar 2009 15:27

QGraphicsItem: Unterscheidung in paint() Drucker/Bildschirm?

Beitrag von mikemc »

Hallo,

wie kann ich unterscheiden, ob gerade mein QGraphicsItem am Bildschirm ausgegeben wird, gedruckt wird oder nur im PrintPreview ist?

Zwischen Drucker/Bildschirm unterscheide ich momentan in dem ich den QWidget Paramenter von paint() == NULL prüfe. Kommt mir bissl billig vor diese Lösung.

Ausserdem würde ich auch gerne unterscheiden zwischen Drucken, und Druckervorschau. Und da hab ich noch garkeine Idee.

lg Michael
mikemc
Beiträge: 42
Registriert: 11. Februar 2009 15:27

Beitrag von mikemc »

1 1/2 Jahre später steh ich immer noch vor dem gleichen Problem :roll:
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du könntest den Typ des QPaintDevices des QPainter überprüfen.
mikemc
Beiträge: 42
Registriert: 11. Februar 2009 15:27

Beitrag von mikemc »

Ok danke!

Weiss nicht, ob das jetzt die eleganteste Methode ist, habe jetzt von QPrinter abgeleitet und mir eine eigenes Flag angelegt, dass gesetzt wird, wenn der Preview-Dialog aktiv ist, da beim Dialog auch ein QPrinter verwendet wird
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Ich denke, QPrinter ist die falsche Stelle, das hat eigentlich gar nix mit deinem Drucken-oder-Zeichnen-Problem zu tun, deckt es doch das Zeichnen nicht ab.
Ich würde bei QGraphicsScene ansetzen - das ableiten. Irgendwann wird das sowieso fällig, wenn du spezielle Features beim Item-Handling einbauen willst. Du kannst dann auch gleich die API nach deinem Gusto erweitern:

Code: Alles auswählen

class MyScene : public QGraphicsScene {
    enum PaintStatus {
        Paint,
        Print,
        PrintPreview
    };
    PaintStatus paintStatus_;
public:
    MyScene()
     : paintStatus_(MyScene::Paint)
    {}

    void print(QPrinter& p) {
        PaintStatus lastStatus = paintStatus_;
        paintStatus_=MyScene::Print;
        // hier auf Printer malen
        paintStatus_ = lastStatus;
    }

    QPixmap printPreview() {
        PaintStatus lastStatus = paintStatus_;
        paintStatus_=MyScene::PrintPreview;

        QPixmap previewPix;
        // hier auf previewPix malen
        paintStatus_ = lastStatus;
        return previewPix;
    }
    
    PaintStatus paintStatus() const {
        return paintStatus_;
    }
};
In der paint() deines Items prüfst du nun, was this->scene()->paintStatus() gerade macht und zeichnest entsprechend.
Antworten