2016-04-28 15 views
-7

Ich möchte QPushButton mit QIcon linksbündig ausrichten (nicht zur Mitte als Standard) und Text Center ausrichten. Ich möchte kein Stylesheet verwenden. Ich weiß, dass möglicherweise QPainter verwenden könnte, aber ich konnte es nicht tun. Ich hatte wenig Ahnung und versucht, diesen Code:Construct QPushButton mit QIcon alignleft und Text Center ausrichten

void MyPushButton::paintEvent(QPaintEvent *) 
{ 
    QStylePainter painter(this); 
    QStyleOptionButton opt; 
    initStyleOption(&opt); 
    painter.drawItemPixmap(opt.rect, Qt::AlignLeft, opt.icon); 
    painter.drawItemText(opt.rect, Qt::AlignCenter, palette(), 1, opt.text); 
    painter.drawPrimitive(QStyle::PE_PanelButtonCommand, opt); 
} 

, die diese Fehlermeldung erzeugt

no matching function for call to 'QStylePainter::drawItemPixmap(QRect&, Qt::AlignmentFlag, QIcon&)' painter.drawItemPixmap(opt.rect, Qt::AlignCenter, opt.icon);

Was oben mit dem Code falsch?

+1

Wir müssen auch wissen, was wirklich passiert, wenn Sie den Code lief und was man darüber nicht gefallen hat. –

+0

dieser Fehlercodefehler: keine übereinstimmende Funktion für den Aufruf von 'QStylePainter :: drawItemPixmap (QRect &, Qt :: AlignmentFlag, QIcon &)' painter.drawItemPixmap (opt.rect, Qt :: AlignCenter, opt.icon); – mumulala

+1

@mumulala Die Antwort gehört in eine Bearbeitung der Frage, nicht in einem Kommentar :) –

Antwort

6

Sie

this error code error: no matching function for call to 'QStylePainter::drawItemPixmap(QRect&, Qt::AlignmentFlag, QIcon&)' painter.drawItemPixmap(opt.rect, Qt::AlignCenter, opt.icon);

bekommen, weil drawItemPixmap zieht ... ein pixmap. Kein Symbol. Alles, was Sie tun müssen, ist die Icons Pixmap mit dem pixmap() Accessor zu bekommen.

Änderung

painter.drawItemPixmap(opt.rect, Qt::AlignLeft, opt.icon); 

zu

// or whaever size you want 
painter.drawItemPixmap(opt.rect, Qt::AlignLeft, opt.icon.pixmap(QSize(16,16))); 
+0

danke @ Nicholas für respons, ich habe den Code geändert und es hat keinen Fehler erzeugt, aber Icon und Text sind unsichtbar. – mumulala

+0

@mumulala ist es wie Kuba sagte, ohne spezifischen Code, Bilder der Ausgabe und Fehlermeldungen, können wir das Problem nicht replizieren, und es gibt nicht viel, was wir tun können. –

+0

wenn ich diese Zeile entferne painter.drawPrimitive (QStyle :: PE_PanelButtonCommand, opt); QIcon ist auf der linken Seite und Text ist in der Mitte, aber kein Verhalten der Schaltfläche. – mumulala