QCheckbox mit eigenem Image

Gast #5218249
Lesenswert?

Hallo,

ich habe mir mit dem QtDesigner eine kleine GUI gebastelt. Bestandteil 
sind ein paar QPushButtons und einige QCheckBoxen. Im nächsten Schritt 
habe ich das Stylesheet für die Buttons geändert, durch das Hinzufügen 
eines border images habe ich eine eigene Grafik für den Button 
eingefügt. Klappt soweit auch alles.
Das habe ich dann auch für die CheckBoxen gemacht, dort habe ich 
allerdings das Problem, dass meine Grafik im Hintergrund liegt und die 
originale CheckBox von Qt darüber. Hier mal das Stylesheet dazu:
1
#cBox_LoadData{
2
background-color:transparent;
3
border-image: url(./checkbox_off.png);
4
background:none;
5
border:none;
6
background-repeat:none;
7
}
8
#cBox_LoadData:checked{
9
border-image: url(./checkbox_on.png);
10
}

Kennt einer das Problem?
Danke im Voraus!
Gruß Nico
Gast #5219612
Lesenswert?

Hm...
Da noch keiner was geschrieben hat, gebe ich mal doch eine halbgare Idee 
von mir.
>Vorraus noch zwei Fragen:
1.) Kannst du mal ein Bild posten wie es aktuell aussieht und dann 
beschreiben, was du eigentlich willst?

2.) Ich NEHME an, du willst ein Bild wo bei Status "Checked" der Haken 
vor dem Bild zu sehen ist, aber sonst die übliche Chekbox-Erscheinung 
verborgen bleibt?

>> Zu meiner Idee:
Letztlich könntest du dir eine eigene Klasse bauen, die auf einem 
QPushButton basiert und das Interface vom QCheckBox erbt.
Innerhalb der Klasse verschaltest du das clicked() Signal mit einem 
internen Slot einer Statusvariable welche du im Slot toggelst und die 
dann dem Status der "PseudoCheckBox" entspricht. Je nachdem in welchen 
Status getoggelt wird, weißt du ein anderes Stylesheet zu.

>>DENNOCH
solltest du vorher relativ sicher sein, dass das was du vorhast nicht 
auch mit einer CheckBox geht, denn mein Vorschlag geht stark in die 
Richtung "Reinvent the wheel".
Gast #5219636
Lesenswert?

Hallo,

ich will einfach das Qt Image der Checkbox durch ein eigenes ersetzen.
So halb funktioniert es ja auch. Das Problem ist, dass mein eigenes 
Image unter der Qt Checkbox liegt. Ich stelle später mal ein Bild ein.
Gast #5219656
Lesenswert?

Must mal abwarten, ob jemand mit einer besseren Idee als meiner kommt. 
Sonst gibt es doch auch ein dezidiertes Qt-Forum.
Warscheinlich wäre es bei meiner Idee eh viel schlauer, zu schauen, ob 
man einer eigenen Klasse einfach die QCheckBox Klasse vererbt. Kenne die 
Qt Klassenhierachie nicht im Detail - könnte mir vorstellen, dass 
QPushbutton und QCheckBox sich Basisklassen teilen. So kann es durchaus 
sein, dass QCheckBox auch ein clicked() Signal hat, was du in deiner 
eigenen Klasse abfangen könntest...
Gast #5221615
Lesenswert?

Mit einem QBushButton eine Checkbox basteln ist nicht weiter schwierig. 
So was in der Art:
1
Im Stylesheet
2
QPushButton {border-image: ...}
3
QPushButton:hover {border-image: ...}
4
QPushButton[attention="checked"] {border-image: ...}
5
QPushButton:hover[attention="checked"] {border-image: ...}
6

7
Im Programm
8
void Mask::breakButtonClicked()
9
{
10
  ui->checkBreak->setProperty("attention", "checked");
11
}

Oder halt eleganter mit einer eigenen Klasse von QPushButton abgeleitet.
Gast #5221619
Lesenswert?

Mir fällt gerade noch auf - das funktionierte bei mir nur mit einem 
Workaround. Nach dem setProperty() braucht es noch ein setStyleSheet()
1
ui->checkBreak->setProperty("attention", "checked");
2
ui->checkBreak->setStyleSheet(ui->checkBreak->styleSheet());
#5221941
Lesenswert?

Du weißt aber, dass man einen Button auch einfach checkable machen kann? 
Da braucht man keine eigene Property dafür zu definieren. Es reicht ein 
button->setCheckable(true). Im Stylesheet kann man dann direkt die 
Property "checked" benutzen.

Noch einer schrieb:
> Nach dem setProperty() braucht es noch ein setStyleSheet()

Man muss nicht gleich das ganze Stylesheet neu damit verbinden. Es 
reicht ein:
1
style()->unpolish(button);
2
style()->polish(button);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren