QComboBox deaktivieren

Alles rund um die Programmierung mit Qt
Antworten
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

QComboBox deaktivieren

Beitrag von osiris81 »

Hallo,

Ich möchte eine QComboBox deaktivieren, allerdings nicht mittels setEnabled(false) weil die Anzeige nicht ausgegraut sein soll.

Gib es noch andere Möglichkeiten zu verhindern, dass eine Auswahl getätigt wird (Auswahlfeld verschwindet, durch klicken des Auswahlfelds erscheint kein PopUp, etc.)?

Ein QLineEdit hat z.B. die Methode setReadOnly(bool) um zu verhindern, dass der Inhalt verändert wird (und die Anzeige wird dabei nicht ausgegraut)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QComboBox hat nichts in dieser Form. Und um diese Funktion nachzubilden, müßtest du relativ viel Aufwand treiben. Aber warum? Wenn der Benutzer in der ComboBox nichts ändern darf, dann sollte man es ihm auch anzeigen. Und das erledigt doch setEnabled(false).
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

Hi Upsala,

Danke für deine Antwort! Im gleichen Dialog sind eben neben der ComboBox noch viele QLineEdits und diese sind mittels setReadOnly(...) deaktiviert worden, was sie nicht ausgraut. Konsequenterweise müsste ich dann alle Eingabefelder ausgauen und das möchte ich nicht.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Immer wieder interessant wie sich Programmierer gegen jedwede Usability entscheiden. Wenn ein Lineedit readOnly ist, dann geht der User davon aus, das dem immer so ist. Ich kann doch nicht eine Box mal editierbar machen und mal nicht, ohne das es optisch sichtbar ist. Soll der User erst jedesmal reinklicken, um zu sehen, ob er Einträge ändern kann oder nicht?

Es gibt Styleguides für Windows und Mac OS. Die beschreiben beide wie Software unter dem jeweiligen BS aussehen sollte usw. Größter Unterschied, beim Mac OS hält man sich dran, bei Win interessiert es keinen.
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

macman hat geschrieben:Immer wieder interessant wie sich Programmierer gegen jedwede Usability entscheiden....
Deine Antwort hilft mir nun wirklich gar nicht. Da du weder die Anwendung noch den konkreten Einsatz der ComboBox kennst finde ich es unangebracht mir hier einen Vortrag über Usability zu halten.

Wie dem auch sei, ich habe mich dafür entschieden, die ComboBox durch ein QStackedWidget zu ersetzen, welches eine ComboBox und ein LineEdit enthält, soll die Anzeige readOnly sein zeige ich die QLineEdit, ansonsten die QComboBox.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Wie wird die ComboBox denn eingesetzt?
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

Die ComboBox ist Bestandteil einer View-Klasse. Neben der ComboBox sind noch einige QLineEdits (alles zusammen in einer GroupBox). Die View-Klasse kann nun je nach Verwendungszweck als gesamtes read only oder beschreibbar sein. Für ein QLineEdit funktioniert dies auch gut, für die QComboBox leider nicht. Warum ein setReadOnly bei der QLineEdit nun legitimer sein soll als bei einer QComboBox verstehe ich auch nicht.

Wie gesagt habe ich das Problem über den Umweg mit der QStackedWidget gelöst.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Ich würde mich da trotzdem macman anschließen und behaupten, dass deine Lösung eher verwirrend ist. Zumal du mit der Groupbox eh schon die Möglichkeit hast, alle Widgets auf einmal ein/auszuschalten.
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

QPalette

Beitrag von softwaremaker »

Nur als Ergänzung weil ich gleiches Problem habe, dass kein setReadOnly für QComboBox möglich ist. Aber es ist recht einfach über QPalette realisierbar:

QPalette pal;
pal.setColor( QPalette::Disabled, QPalette::Base, Qt::yellow );
//setzt gelb als Hintergrundfarbe für Zustand deaktiviert

m_ui->meineCombobox->setPalette( pal );
//setzt die neue Palette für die ComboBox

und nun ist der Hintergrund gelb bei
m_ui->meineCombobox->setEnabled(false);
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

macman hat geschrieben:Immer wieder interessant wie sich Programmierer gegen jedwede Usability entscheiden. Wenn ein Lineedit readOnly ist, dann geht der User davon aus, das dem immer so ist. Ich kann doch nicht eine Box mal editierbar machen und mal nicht, ohne das es optisch sichtbar ist. Soll der User erst jedesmal reinklicken, um zu sehen, ob er Einträge ändern kann oder nicht?

Es gibt Styleguides für Windows und Mac OS. Die beschreiben beide wie Software unter dem jeweiligen BS aussehen sollte usw. Größter Unterschied, beim Mac OS hält man sich dran, bei Win interessiert es keinen.
Absolut richtig!
Antworten