Seite 1 von 1

QListView und Item-Hintergrundfarbe

Verfasst: 8. Dezember 2011 22:29
von QuornJulio
Hallo Leute,

ich habe eine QListView und möchte, dass der Hintergrund von jedem Item mit einem QLinearGradient gezeichnet wird.
Um das zu realisieren habe ich der QListView meine StyleViewItem, die von QCommonStyle ableitet, angehängt mit

Code: Alles auswählen

this->listView->setStyle(new StyleViewItem);
Die überschriebene drawControl-Methode von QCommonStyle sieht folgendermaßen aus:

Code: Alles auswählen

void StyleViewItem::drawControl(ControlElement control, const QStyleOption *option, QPainter *painter, const QWidget *widget) const {

	if (control == CE_ItemViewItem) {
		painter->save();
		QRect rect = option->rect;
		QLinearGradient gradient = QLinearGradient(option->rect.top(), option->rect.left(), option->rect.top(), option->rect.bottom());
		const QColor from = QColor::fromRgb(120, 120, 120);
		const QColor to = QColor::fromRgb(25, 25, 25);
		gradient.setColorAt(0.1, from);
		gradient.setColorAt(0.9, to);
		gradient.setSpread(QGradient::PadSpread);
                painter->fillRect(rect, QBrush(gradient));
                painter->restore();
        } else {
                this->QCommonStyle::drawControl(control, option, painter, widget);
        }
Für jeden Item wird ein Hintergrund gezeichnet, allerdings nimmt der Hintergrund von einem Item zum nächsten ab siehe Image.

http://imageshack.us/photo/my-images/845/screenpo.jpg

Auf dem Image ist links die Anwendung zu sehen und die QListView mit den Verläufen.
Rechts ist zu sehen die Anwendung und wie ich mir die Verläufe für die Items vorstelle.
Das "rechte Image" ist bearbeitet in GIMP!

Ich würde gerne verstehen, was da falsch läuft. Wäre euch sehr dankbar, wenn ihr mir helfen würdet.
(Mir ist bewußt, dass es auch andere Möglichkeiten gibt wie z.B. StyleSheets. Möchte ich aber nicht einsetzen!)

Vielen Dank im voraus.

QuornJulio

Re: QListView und Item-Hintergrundfarbe

Verfasst: 9. Dezember 2011 10:04
von archer
Hast du schon mal diese Variante probiert:

Code: Alles auswählen

listView->setStyleSheet(
            "QListView::item {"
            "        background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
            "                                    stop: 0 #ABAFE5, stop: 1 #8588B2);"
            "}");

Re: QListView und Item-Hintergrundfarbe

Verfasst: 13. Dezember 2011 22:27
von QuornJulio
Hallo Leute,

folgender Codeausschnitt führte zum gewünschten Ergebnis:

Code: Alles auswählen

QLinearGradient gradient(0, 0, 0, 1);
const QColor from = QColor::fromRgb(15, 15, 15, 200);
const QColor to = QColor::fromRgb(10, 10, 10, 200);
gradient.setColorAt(0.1, from);
gradient.setColorAt(0.9, to);
gradient.setSpread(QGradient::PadSpread);
gradient.setCoordinateMode(QGradient::ObjectBoundingMode);
Entscheidend sind die erste und die letzte Zeile.

Gruss

QuornJulio