einzelne Pixel per Maus auf Hintergrund zeichnen

Alles rund um die Programmierung mit Qt
Antworten
YaY
Beiträge: 1
Registriert: 5. November 2013 19:32

einzelne Pixel per Maus auf Hintergrund zeichnen

Beitrag von YaY »

Hallo zusammen,

folgende Problemstellung: In meinem GUI brauche ich links ein Fenster (Zeichenbereich, gelber Hintergrund), wo ich z.B. mit Mausklicks (das mit dem eventFilter für die Mausinputs funktioniert wunderbar) einzelne Pixel einfärben (schwarz) kann und rechts verschiedene Buttons/Schieberegler.
Also habe ich mein MainWindow mit dem centralWidget als "Wurzel", links mein widget (QWidget) zum zeichen und rechts meine Knöpfe. Als Alternative dazu bietet sich ja QImage an, aber da ich erstmal nix speichern will, sondern nur zur Laufzeit ein bisschen rumspielen, bin ich doch mit QWidget gut bedient, oder?
Nun kommt das erste Problem, wenn ich im Konstruktor vom MainWindow per "widget->setStyleSheet("background-color:yellow;");" die Hintergrundfarbe setze, kann ich mit dem "MainWindow::paintEvent(QPaintEvent *event){...}" zwar Pixel manipulieren, aber das wird nicht angezeigt, weil es vom gelben Hintergrund überdeckt wird (wenn ich den Hintergrund transparent schalte sehe ich das es funktioniert).
--> Also dachte ich mir, definiere ich mir mein eigens widget (mywidget), abgeleitet von QWidget und nutze deren Paintmethode um auf dem gelben Hintergrund malen zu können, nur leider wird mir der Hintergrund ums verrecken nicht angezeigt. Ich habe "widget->setStyleSheet("background-color:yellow;");" im Konstruktor von MainWindow und mywidget gesetzt und selbst an den Anfang der Paintmethode in mywidget.cpp, alles ohne Erfolg.
Der einzige Workaround bisher ist auf Kosten der Hintergrundfarbe mein widget einzurahmen (damit es sich vom Rest der GUI abhebt) und den Hintergrund transparent zu setzen.

Was mache ich falsch? (Quelltext lasse ich erstmal außen vor, ich denke ich habe da irgendwo ein Denkfehler/Wissenslücke, wenn es doch kein offensichtlicher Fehler ist, reiche ich ihn asap nach)

Danke erstmal!
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: einzelne Pixel per Maus auf Hintergrund zeichnen

Beitrag von Hulk2442 »

Ich hatte mal einen ähnlichen Fehler und das lag nicht an der Programmierung sondern an der Parent/Child Vererbung des CSS Styles.
Was du mal versuchen kannst ist anstelle eines CSS Styles direkt auf die Eigenschaften deines Widgets zuzugreifen und per QPalette http://qt-project.org/doc/qt-5.1/qtgui/qpalette.html den Background anzupassen.
Wenn du dir nicht sicher bist welche "role" du verwenden sollst mach dir ein dummy Projekt im QtEditor mit einem leeren Widget und ändere dort direkt die Farben der zu den jeweiligen roles in den Optionen des Widgets.

Code: Alles auswählen

    
//pseudo code
    QPalette p;
    p.setColor(QPalette::Background, red);
    widget->setPalette(p);
Antworten