문제

나는 QT를 처음 사용하므로 내 무지를 실례합니다.

qsizepolicy :: 수평 및 수직 모두에 선호되는 'SVG 이미지 버튼'을 만들려고합니다. 그 부분은 작동합니다. 창의 크기가 조정되면 버튼이 자라서 원하는 방식으로 정확하게 줄어 듭니다. 그러나 버튼의 이미지는 같은 크기를 유지합니다. 버튼으로 이미지를 스케일링하고 싶습니다. resizeevent를 과부하 시키려고했고 SetImagesize를 호출하려고했지만 무한히 재발합니다.

#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() );
}
도움이 되었습니까?

해결책

이것이 내가 결국 해결 한 방법입니다.

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 );
}

다른 팁

무한 재귀를 피하는 것은 쉽습니다. SVGPUSHBUTTON에 부울 데이터 멤버를 추가하여 크기 조정 이벤트 내부임을 나타내고 다음과 같은 이벤트에 들어갈 때 확인하십시오.

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

이것으로 당신은 이것이 실제로 당신이 원하는 것을 수행 할 수 있도록 할 수 있습니다. 작업을 수행 한 후에는 재귀 호출의 원인을 찾아 볼 수 있습니다. 내 생각에 이미지의 크기가 이미지의 크기를보다 약간 크게 설정하고 버튼이 다시 크기를 조정하고 싶을 것입니다. '
이를 해결하는 올바른 방법은 이미지를 크기를 조정하려는 올바른 크기를 파악하는 것입니다.
이 작업 후에도 안전을 위해 재귀 검사를 제자리에 남겨 두었습니다.

문서를 살펴보면 원하는 것은 QLabel 버튼에. 그런 다음 전화하십시오 setPixmap() 레이블에있는 다음 속성을 설정하십시오 scaledContents() 에게 true.

버튼에 이미 아이콘과 텍스트 속성이 있기 때문에 버튼에 레이블을 추가하는 것이 작동하는지 확실하지 않습니다.

나는 이것을 커뮤니티 위키로 표시하여 원하는 경우 변경할 수 있습니다.

또한 내 경험에서 엉망입니다 resizeEvent() 거의 좋은 생각이 아닙니다 :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top