2010-12-14 10 views
0

Ich bin mit einem QItemDelegate in Kombination mit der QTableView IsUserCheckable Flag, um eine zentrierte Checkbox Spalte zu zeichnen. Alles hat gut funktioniert, bis ich die Zeilenauswahl für die Tabelle aktiviert habe.Qt: Checkbox & QItemDelegate - nicht malen Kontrollkästchen, wenn die Auswahl

Bei der Auswahl wird nur der blaue Auswahlhintergrund angezeigt, und die Kontrollkästchen werden nicht mehr angezeigt.

Das folgende ist mein Code, den ich verwende, um das Kontrollkästchen innerhalb des Delegaten zu malen.

void CheckboxDelegate::drawCheck(QPainter* painter, QStyleOptionViewItem const& option, QRect const& rect, Qt::CheckState state) const 
{ 
    QSize size = check(option, option.rect, Qt::Checked).size(); 
    QRect checkboxRect = QStyle::alignedRect(option.direction, Qt::AlignCenter, size, option.rect); 
    QItemDelegate::drawCheck(painter, option, checkboxRect, state); 
} 

Irgendwelche Ideen, warum dies nicht richtig gezeichnet wird, wenn eine Auswahl getroffen wird?

+1

Sie müssen wirklich mehr Code posten. Ich nehme an, Ihre Bestellung ist durcheinander und Sie malen den blauen Hintergrund ** nach ** Sie malen die Checkbox – Robert

+0

Dies ist der einzige relevante Code, der nichts malt. Ich stelle mir vor, dass das Thema mit der von mir erwähnten Reihenfolge meiner Malerei zusammenhängt, aber ich bin mir nicht sicher, wie ich an dieser Stelle die richtigen Schritte umsetzen soll. Hoffe, dass jemand mehr Einblick geben kann. – cweston

Antwort

0

Es ist schwierig, sicher zu sein, dass meine Antwort Ihnen wegen des fehlenden Codes helfen wird, aber ich denke, Ihr Problem ist, dass der Maler nicht nur den QRect malt, sondern auch den QItemDelegate. Dies bedeutet, dass, wenn Sie nicht ausdrücklich angeben, welche Farbe der QRect haben soll, er dieselbe Farbe wie die gesamte Zelle hat.

Wenn das stimmt, dann ist Ihr QRect immer noch da, hat aber einfach die gleiche Farbe wie der Rest des Zelleninhalts.

Sie können die Farbe des für die QRect des Malers ändern painter.setPen(QColor.red);

wieder tun, ich habe nicht viel Code zur Arbeit von, aber wenn Sie die Prüfung wollen eine andere Farbe zu sein, müssen Sie setze es auf eine andere Farbe.

Wenn Sie mehr Code zur Verfügung stellen, könnte ich Ihnen deutlicher antworten.

+0

Natürlich habe ich das in Java (Sie können das gleiche in C++ tun) – Ryan

Verwandte Themen