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!
einzelne Pixel per Maus auf Hintergrund zeichnen
Re: einzelne Pixel per Maus auf Hintergrund zeichnen
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.
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);