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

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.