Seite 1 von 1

[gelöst] QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox

Verfasst: 25. Juli 2018 17:48
von Tilman Räger
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)

Re: QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox

Verfasst: 26. Juli 2018 08:31
von Christian81
Was für ein Model benutzt Du und was gibst Du für die Zelle als EditRole zurück?

Re: QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox

Verfasst: 26. Juli 2018 10:20
von Tilman Räger
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)

Re: QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox

Verfasst: 26. Juli 2018 17:48
von Christian81
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.

Re: [gelöst] QTableView - Cursor im hinterern Bereich einer Zelle mich Checkbox

Verfasst: 27. Juli 2018 16:45
von Tilman Räger
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: (ItemIsSelectable|ItemIsEnabled|ItemNeverHasChildren) +
für Normale Items: ItemIsEditable
für Checkbox-Items: ItemIsuserCheckable | ItemIsEditable (letzteres macht keinen Unterschied auf die Darstellung)


Gruß
Tilman