Seite 1 von 1
QGraphicsItem: Unterscheidung in paint() Drucker/Bildschirm?
Verfasst: 20. August 2009 15:01
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
Verfasst: 24. Januar 2011 15:23
von mikemc
1 1/2 Jahre später steh ich immer noch vor dem gleichen Problem

Verfasst: 24. Januar 2011 16:05
von upsala
Du könntest den Typ des QPaintDevices des QPainter überprüfen.
Verfasst: 1. Februar 2011 20:45
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
Verfasst: 2. Februar 2011 08:45
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.