Frage

Ich bin neu so Qt bitte meine Unwissenheit entschuldigen.

Ich versuche, eine ein ‚svg Bild Button‘ mit QSizePolicy zu erstellen :: Bevorzugte sowohl für horizontale und vertikale. Das Teil funktioniert. Wenn das Fenster verkleinert wird, wächst die Taste und schrumpft ganz genau, wie ich will ... Aber das Bild innerhalb der Taste bleibt die gleiche Größe. Ich möchte das Bild mit der Taste skalieren. Ich habe versucht, resizeEvent zu überlasten, und rufen setImageSize, aber das unendlich recurses.

#ifndef SVGPUSHBUTTON_H
#define SVGPUSHBUTTON_H

#include <QtGui>

class SVGPushButton : public QPushButton
{
public:
    SVGPushButton(QString path, QString name = "");
    ~SVGPushButton();

    void resizeEvent(QResizeEvent * event);
private:
};

#endif // SVGPUSHBUTTON_H

#include "SVGPushButton.h"

SVGPushButton::SVGPushButton(QString svgPath, QString name)
: QPushButton(name)
{
    QIcon icon(svgPath);
    setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
    setFlat(true);
    setIcon(icon);
}

SVGPushButton::~SVGPushButton()
{}

void SVGPushButton::resizeEvent(QResizeEvent * event)
{
    setIconSize( event->size() );
}
War es hilfreich?

Lösung

Dies ist, wie ich es schließlich gelöst:

SVGPushButton::SVGPushButton(QString svgPath, QString name)
: QPushButton()
{
    setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
    QSvgWidget *icon = new QSvgWidget(svgPath,this);
    setLayout( new QHBoxLayout(this) );
    layout()->addWidget( icon );
}

Andere Tipps

die unendliche Rekursion zu vermeiden, ist einfach. Fügen Sie ein boolean Daten Mitglied zu Ihrem SVGPushButton, die Sie in einem Grßenänderungsereignis sind anzeigt und es überprüfen, wenn Sie das Ereignis eingeben wie folgt:

void SVGPushButton::resizeEvent (QResizeEvent * event)
{
    if (m_insideResize)
        return;
    m_insideResize = true;
    // call setImageSize()...
    m_insideResize = false;
}

Damit können Sie sicherstellen, dass dies tatsächlich tut, was Sie wollen, dass es zu tun. Nachdem Sie es an die Arbeit können Sie versuchen, um herauszufinden, was die den rekursiven Aufruf verursacht. Meine Vermutung ist, dass Sie die Größe des Bildes geringfügig größer zu sein, als es sein sollte, und dies bewirkt, dass die Taste erneut, um die Größe zu wollen, etc‘.
Der richtige Weg, es dann zu lösen, ist die richtige Größe, die Sie auf das Bild, um die Größe wollen, um herauszufinden.
Danach funktioniert, würde ich immer noch die Rekursion der Check-in für alle Fälle lassen, um sicher zu sein.

Vom Blick über die Dokumentation, es sieht aus wie das, was Sie tun möchten, ist eine QLabel in der Schaltfläche hat. Dann setPixmap() auf dem Etikett aufrufen und dann die Eigenschaft scaledContents() auf true.

Jetzt bin ich nicht sicher, ob nur ein Etikett auf die Schaltfläche Hinzufügen funktionieren wird, weil die Schaltfläche bereits ein Symbol und Text Eigenschaft hat.

Ich werde dies als Community Wiki markieren, so dass Sie es ändern können, wenn Sie wollen.

Auch aus meiner Erfahrung mit resizeEvent() Unordnung ist selten eine gute Idee: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top