정리

이미지 버튼

저장소/Qt

QPushButton에 이미지 올리기와 enter/leave/press/release event에서의 이미지 변경.


class button : public QPushButton
{
	...

	void setImage(QPiaxmap& _pixmap)
	{
		QSize size;
		size.setWidth(_pixmap.width() / 4);
		size.setHeight(_pixmap.height());

		m_icons[Normal] = (QIcon(_pixmap.copy(Normal * size.width(), 0, size.width(), size.height())));
		m_icons[Click] = (QIcon(_pixmap.copy(Click * size.width(), 0, size.width(), size.height())));
		m_icons[Highlight] = (QIcon(_pixmap.copy(Highlight * size.width(), 0, size.width(), size.height())));
		m_icons[Disable] = (QIcon(_pixmap.copy(Disable * size.width(), 0, size.width(), size.height())));

		if(isEnabled())	setIcon(m_icons[Normal]);
		else			setIcon(m_icons[Disable]);
	
		setIconSize(m_size);
		resize(m_size);
	}
	virtual void	enterEvent(QEvent* _event)
	{
		__super::enterEvent(_event);

		if(isEnabled())
			setIcon(m_icons[Highlight]);
	}
	virtual void leaveEvent(QEvent* _event)
	{
		__super::leaveEvent(_event);

		if(isEnabled())
			setIcon(m_icons[Normal]);
	}
	virtual void mousePressEvent(QMouseEvent* _event)
	{
		__super::mousePressEvent(_event);
	
		if(isEnabled())
			setIcon(m_icons[Click]);
	}
	virtual void mouseReleaseEvent(QMouseEvent* _event)
	{
		__super::mouseReleaseEvent(_event);

		if(isEnabled())
			setIcon(m_icons[Highlight]);
	}
	virtual void changeEvent(QEvent* _event)
	{
		__super::changeEvent(_event);

		if(QEvent::EnabledChange != _event->type())
			return;

		if(isEnabled())	setIcon(m_icons[Normal]);
		else			setIcon(m_icons[Disable]);
	}

};


와.. vector<QIcon> m_icons; 요거 쓸라니까 syntaxhighlighter에서 </qicon>을 붙여버리네 ㅡ,.ㅡ

버튼 이미지는 연속된 4개의 이미지가 하나의 파일로 제작되었을 때를 가정,

m_icons는 vector<QIcon>으로 size는 4로 미리 정의.