Qt: erstellen einer "svg-image-Taste"
Ich bin neu in der Qt-also bitte entschuldigt meine Unwissenheit.
Ich bin versucht, zu erstellen eine "svg-image-button' mit QSizePolicy::Bevorzugt für horizontale und vertikale.
Das Teil arbeitet. Wenn das Fenster in der Größe geändert wird, wird die Schaltfläche wächst und schrumpft, genau so, wie ich will... Aber das Bild in der Schaltfläche die gleiche Größe bleibt.
Ich möchte das Bild, um die Waage mit der-Taste. Ich habe versucht zu überlasten resizeEvent, und rufen Sie setImageSize, aber das unendlich eine Rekursion.
#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() );
}
- JFYI, es ist Qt nicht QT.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich schließlich löste es:
Vermeidung der unendlichen Rekursion ist einfach. Fügen Sie eine Boolesche Daten-member auf Ihre SVGPushButton, dass Sie sich in einem resize-Ereignis aus und überprüfen Sie es, wenn Sie geben Sie das Ereignis wie folgt:
Damit wirst du in der Lage sein, um sicherzustellen, dass dies tatsächlich tut, was Sie wollen, es zu tun.
Nachdem Sie es zu arbeiten, können Sie versuchen, herauszufinden, welche Ursachen die den rekursiven Aufruf. Meine Vermutung ist, dass Sie die Größe des Bildes, das etwas größer als es sein sollte, und dies bewirkt, dass die Schaltfläche ändern möchten wieder usw'.
Der richtige Weg, es zu lösen, dann ist es, herauszufinden, die richtige Größe, die Sie wollen, um die Größe des Bildes an.
Nach diesem Werke, ich würde immer noch verlassen Sie die Rekursion der check-in erfolgt nur im Fall, um sicher zu sein.
Vom Blick über die docs, es sieht aus wie das, was Sie wollen, zu tun ist ein
QLabel
in der Taste. Dann rufen SiesetPixmap()
auf dem Etikett, und legen Sie dann die EigenschaftscaledContents()
zutrue
.Ich bin mir jetzt nicht sicher, ob nur das hinzufügen einer Beschriftung für die Schaltfläche funktioniert, weil der button hat ein Symbol und die text-Eigenschaft bereits.
Ich werde markieren Sie diese als community-wiki, so können Sie es ändern, wenn Sie wollen.
Auch, aus meiner Erfahrung, messing mit
resizeEvent()
ist selten eine gute Idee 🙂