Seite 1 von 1
[gelöst]QLabel farbig gestallten
Verfasst: 10. Juni 2009 13:33
von daRonny
Hallo Leute,
ich hätte da mal ne Frage. Ich bekomme es überhaupt nicht hin mein QLabel eine Hintergrundfarbe zu verpassen. Unfassbar, ich liege auf dem Schlauch.
Meine Idee ist es aus einem QColorDialog mir eine Farbe auszusuchen und dem QLabel diese Farbe zu verpassen. Was ich bis jetzt nur schaffe ist es nur dem Text im Label zu verpassen.
Code: Alles auswählen
mChangeColor = QColorDialog::getColor(mChangeColor, this);
QPalette *palette = new QPalette(mChangeColor);
//palette->setColor(QPalette::Window ,mChangeColor);
mForm.label->setPalette(*palette);
Ich würde mich über Hilfe freuen
Gruß,
Ronny
Verfasst: 10. Juni 2009 13:54
von franzf
Code: Alles auswählen
QColor windowColor = QColorDialog::getColor(initialColor); // initialColor mitgeben, damit nicht irgendeine Farbe rauskommt, falls der Nutzer ohne Hirn auf OK drückt ;)
QPalette pal = mForm.label->palette(); // wir wollen nur die Hintergrundfarbe ändern und nich ne komplett andere, unpassende Palette setzen
pal.setColor(QPalette::Window, windowColor);
mForm.label->setPalette(pal);
So in etwa.
Sollte sich nix ändern, dann macht dein verwendeter Style irgend nen Mist und ignoriert/modifiziert die Hintergrundfarbe deines Labl beim zeichnen.
Verfasst: 10. Juni 2009 16:49
von daRonny
Hey danke für deine Hilfe, doch ich muss leider sagen, dass es mir nicht weitergeholfen hat.
Er verändert einfach mein QLabel nicht. Das kann doch nicht sein, dass das ändern der Farbe eines Labels so schwer ist?
Zur Zeit:
Code: Alles auswählen
const QColor initColor(Qt::red);
mChangeColor = QColorDialog::getColor(initColor, this); // Die Startfarbe des Dialoges ist nun rot, damit
// nicht wie du sagst jemand einfach auf Ok klickt.
QPalette pal = mForm.label->palette();
pal.setColor(QPalette::Background, mChangeColor); // Ich habe hier mal QPalette:: auf Background gesetzt. Nicht sicher was dahin muss :?.
mForm.label->setPalette(pal);
Ich weiss echt nicht weiter... echt komisch.
Verfasst: 10. Juni 2009 17:17
von franzf
Begrenze das Beispiel mal auf ein Minimum. Du arbeitest ja grad mit ner ui.
Versuchs mal mit folgendem Beispiel:
Code: Alles auswählen
#include <QtGui>
int main( int argc, char **argv )
{
QApplication app( argc, argv );
QLabel lbl("Hallo, neuer Hintergrund!");
lbl.show();
QPalette pal = lbl.palette();
QColor newBg = QColorDialog::getColor(pal.color(QPalette::Window));
pal.setColor(QPalette::Window, newBg);
lbl.setPalette(pal);
return app.exec();
}
Wenn der geht, weißt du dass es an deinem Code liegt.
Da schaust du dir selber alles nochmal genau an, reduzierst deinen Code aufs nötigste, und das kannst du dann hier posten, wenn du den Fehler nicht eh schon selber siehst.
Verfasst: 10. Juni 2009 18:23
von daRonny
Das ist so unfair. Dein Code funktioniert natürlich einwandfrei.
Ja du hast recht, dass ich mit einer Gui arbeite. Aber ich habe dort nur den einen Button und ein Label mehr nicht. den Button connecte ich mit der Methode und dort habe ich dann das gleiche wie bei dir eingegeben.
liegt eventuell hier der Wurm? :
main.cpp
Code: Alles auswählen
#include "MainWindow.h"
int main(int argc, char* argv[])
{
QApplication app( argc, argv);
MainWindow window;
window.show();
return app.exec();
}
Wie du siehst, rufe ich hier den Konstruktor von MainWindow auf, wo ich ein connect habe der dann zu der Funktion führt, wo das alles mit dem Label passieren sollte. Gibt es eventuell ein Problem mit dem Label wenn er dann zurück kommt und window.show() macht?
MainWindow.cpp
Code: Alles auswählen
void MainWindow::changeColor()
{
QPalette palette = mForm.label->palette(); // mForm ist meine Gui alle andere ist genau wie dein Code der geht.
QColor mChangeColor = QColorDialog::getColor(palette.color(QPalette::Window));
palette.setColor(QPalette::Window, mChangeColor);
mForm.label->setPalette(palette);
}
Tut mir leid wenn ich dich so doll beanspruche.
Gruß[/code]
Verfasst: 10. Juni 2009 18:36
von franzf
Kannst du mal bitte den Inhalt deines "MainWindow.h" posten?
Und bitte auch die Implementierung des MainWindo-Konstruktors.
Und beanspruchen ist wurscht. Wenn ich nicht wollte würd ich auch nicht antworten (ist ja alles freiwillig hier

)
Grüße
Franz
Verfasst: 10. Juni 2009 18:45
von daRonny
Der Inhalt vom "MainWindow.h":
Code: Alles auswählen
#include <QWidget>
#include "ui_view.h"
class MainWindow : public QMainWindow
{
Q_OBJECT;
public:
MainWindow();
protected:
public slots:
void changeColor();
private:
QColor mChangeColor;
Ui::Form mForm;
};
Der Konstruktor:
Code: Alles auswählen
MainWindow::MainWindow()
{
mForm.setupUi(this);
connect(mForm.changeButton, SIGNAL(clicked()), this, SLOT(changeColor()));
}
Die changeColor Methode kennst ja unten schon

.
Verfasst: 10. Juni 2009 19:50
von franzf
Unter Windows kann es sein, dass du gar kein Glück haben wirst, denn da wird die Palette scheinbar ignoriert (les dir zum palette-property von QWidget mal die Doku durch).
mit dem Prop "autoFillBackground" bei dem label wird bei mir der Hintergrund in ner anderen Farbe gezeichnet, schaut aber kacke aus, da hier ein eigentlich schöner Farbverlauf durch eine platte, charakterlose, einfarbige Fläche ersetzt wird
Und wenn gar nix hilft, kannst du versuchen dem label einen styleSheet unterzujubeln, und darin die background-color entsprechend setzen.
Aber in jedem Fall komisch, dass das Setzen der Palette für ein Child-Widget beim Zeichnen ignoriert wird (egal welcher Style) :/
Grüße
Franz
Verfasst: 10. Juni 2009 20:27
von upsala
Ich würds ja einfach mal mit dem Designer testen...
Verfasst: 10. Juni 2009 21:35
von daRonny
Hey, also danke nochmal für eure Hilfe. Ich habe das Problem nun mit dem StyleSheet gelöst.
Code: Alles auswählen
Label->setStyleSheet("QLabel{background-color: Rgb(100,255,0)}");
So klappt das doch schonmal top. Wenn ihr jetzt noch wisst, wie ich den QColor vom QColorDialog in den StyleSheet reinbekomme?
Kann man die Farbe aus dem "QColor" irgendwie zum Rgb umwandeln? Hatte in der Doku gesucht, aber nichts dazu gefunden.
Ansonsten danke nochmal für die Unterstützung. Menge dazugelernt.
Verfasst: 11. Juni 2009 09:22
von franzf
daRonny hat geschrieben:Kann man die Farbe aus dem "QColor" irgendwie zum Rgb umwandeln? Hatte in der Doku gesucht, aber nichts dazu gefunden.
Direkt gibts wohl auch nix, aber es gibt ja QString, und QColor nach rgb() gibt halt nen int zurück. Außerdem kennt QColor auch red(), green() und blue().
Das schaut in python dann so aus:
Code: Alles auswählen
>>> c = QColor(255, 125, 125)
>>> cs = "rgb(" + QString.number(c.red()) + ", " + QString.number(c.green()) + ", " + QString.number(c.blue()) + ")"
>>> print cs
rgb(255, 125, 125)
War zu faul da extra mit C++ anzufangen, aber ich denke es ist klar wie es geht.
Grüße
Franz