문제
나는 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()
거의 좋은 생각이 아닙니다 :-)