Hallo,
ich habe hier ein etwas seltsames Verhalten, das ich gerne beseitigen würde.
In einem QTableView habe ich eine Spalte mit boolschen Werten, die als Checkbox dargestellt werden. Wenn ich in diese Zelle klicke, wird der Wert der Checkbox getoggelt - allerdings bekomme ich im 2. Teil der Zelle einen Cursor, an dem ich auch Werte eingeben kann, bzw. es erscheint sogar so zu sein, das der Wert der Checkbox erst beim 2 Klick (wenn ich direkt auf die Checkbox klicke) geändert wird. leider sieht man es nicht so genau, da der Haken der Checkbox immer schwarz anstelle in der normalen Schriftfarbe wie der Rand dargestellt wird (Qt-Bug?) und man so bei schwarz auf dunkelblau nicht allzuviel sieht.
Kennt jemand dieses Symptom und hat eine Ahnung, wie man das Verhalten beseitigen kann?
Für alle (ernsthaften) Antworten schon einmal im Voraus vielen Dank!
mit freundlichen Grüßen
Tilman (Räger)
[gelöst] QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox
-
- Beiträge: 189
- Registriert: 6. Juni 2007 15:23
- Wohnort: Göttingen
[gelöst] QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox
Zuletzt geändert von Tilman Räger am 27. Juli 2018 16:46, insgesamt 1-mal geändert.
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox
Was für ein Model benutzt Du und was gibst Du für die Zelle als EditRole zurück?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
- Beiträge: 189
- Registriert: 6. Juni 2007 15:23
- Wohnort: Göttingen
Re: QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox
Ich verwende ein selbstgeschriebenes Model, abgeleitet von QAbstractTableModel.
in der Funktion data() habe ich bei Qt::EditRole zwei Returnwerte ausprobiert:
- QVariant() -> das oben beschriebene Verhalten
- boolscher Wert -> ein noch unbrauchbareres Verhalten, nämlich die Checkbox im vorderen Teil der Zelle und eine ComboBox (wahr/falsch) im hinteren Teil
Gruß
Tilman (Räger)
in der Funktion data() habe ich bei Qt::EditRole zwei Returnwerte ausprobiert:
- QVariant() -> das oben beschriebene Verhalten
- boolscher Wert -> ein noch unbrauchbareres Verhalten, nämlich die Checkbox im vorderen Teil der Zelle und eine ComboBox (wahr/falsch) im hinteren Teil
Gruß
Tilman (Räger)
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox
Für die DisplayRole sollte der Qt::CheckState zurückgegeben werden, dann für flags() Qt::ItemIsUserCheckable | Qt::ItemIsEnabled (ggf. noch mehr - je nachdem was Du benötigst). Für die EditRole das gleiche wie für die DisplayRole.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
- Beiträge: 189
- Registriert: 6. Juni 2007 15:23
- Wohnort: Göttingen
Re: [gelöst] QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox
Hallo,
Fast! - allerdings bekomme ich nun an der Stelle, wo vorher der Cursor auftauchte, den numerischen Wert des CheckState angezeigt.
Wenn ich allerdings bei der DisplayRole ein ungültiges QVariant-Object zurückgebe, dann funktionierts!
aktuelle Werte:
data() : EditRole | CheckStateRole: Qt::Checked / Qt::Unchecked
DisplayRole : QVariant()
flags: temIsSelectable|ItemIsEnabled|ItemNeverHasChildren) +
für Normale Items: ItemIsEditable
für Checkbox-Items: ItemIsuserCheckable | ItemIsEditable (letzteres macht keinen Unterschied auf die Darstellung)
Gruß
Tilman
Fast! - allerdings bekomme ich nun an der Stelle, wo vorher der Cursor auftauchte, den numerischen Wert des CheckState angezeigt.
Wenn ich allerdings bei der DisplayRole ein ungültiges QVariant-Object zurückgebe, dann funktionierts!
aktuelle Werte:
data() : EditRole | CheckStateRole: Qt::Checked / Qt::Unchecked
DisplayRole : QVariant()
flags: temIsSelectable|ItemIsEnabled|ItemNeverHasChildren) +
für Normale Items: ItemIsEditable
für Checkbox-Items: ItemIsuserCheckable | ItemIsEditable (letzteres macht keinen Unterschied auf die Darstellung)
Gruß
Tilman