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

Alles rund um die Programmierung mit Qt
Antworten
Tilman Räger
Beiträge: 186
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

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

Beitrag von Tilman Räger » 25. Juli 2018 17:48

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)
Zuletzt geändert von Tilman Räger am 27. Juli 2018 16:46, insgesamt 1-mal geändert.

Christian81
Beiträge: 7245
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag von Christian81 » 26. Juli 2018 08:31

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

Tilman Räger
Beiträge: 186
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

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

Beitrag von Tilman Räger » 26. Juli 2018 10:20

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)

Christian81
Beiträge: 7245
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag von Christian81 » 26. Juli 2018 17:48

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

Tilman Räger
Beiträge: 186
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

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

Beitrag von Tilman Räger » 27. Juli 2018 16:45

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

Antworten