QListView und Item-Hintergrundfarbe

Alles rund um die Programmierung mit Qt
Antworten
QuornJulio
Beiträge: 26
Registriert: 8. Dezember 2011 21:57

QListView und Item-Hintergrundfarbe

Beitrag 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
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: QListView und Item-Hintergrundfarbe

Beitrag 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);"
            "}");
QuornJulio
Beiträge: 26
Registriert: 8. Dezember 2011 21:57

Re: QListView und Item-Hintergrundfarbe

Beitrag 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
Antworten