1.画关闭按钮
拖动图片的功能放后面说,先把关闭按钮给画出来。
现在很多软件,类似QQ,360,91助手......等等软件,界面上都有很多很漂亮的按钮,当鼠标移上去,按钮变为高亮,当鼠标点击下去,按钮变为暗色凹下,当鼠标移开,按钮又恢复原来的样子。
这效果都是由多张图片切换而来的。
涉及到函数:eventFilter, installEventFilter.
几种按钮的enum:
拖动图片的功能放后面说,先把关闭按钮给画出来。
现在很多软件,类似QQ,360,91助手......等等软件,界面上都有很多很漂亮的按钮,当鼠标移上去,按钮变为高亮,当鼠标点击下去,按钮变为暗色凹下,当鼠标移开,按钮又恢复原来的样子。
这效果都是由多张图片切换而来的。
new出一个QToolButton,设置关闭按钮图标。按钮图片一般都以4种状态提供,将4张图片拼成1张png。所以每次只需取出图片中的1/4就行,然后将关闭按钮移动到右上角。
想在Qt中实现这3种效果,很简单,只需在窗体中安装事件过滤器即可。涉及到函数:eventFilter, installEventFilter.
几种按钮的enum:
enum EButtonMouseState
{
EButtonMouseDefault = 0,
EButtonMouseEnter,
EButtonMousePress,
EButtonMouseNone
};
void Preview360::createEventFilter()
{
//安装事件过滤器
m_pButtonClose->installEventFilter(this);
}
//设置按钮图标
void Preview360::setButtonIcon(QToolButton *btn, EButtonMouseState state)
{
QPixmap pixmap(":/images/btn_close.png");
int nWidth = pixmap.width()/4;
int nHeight = pixmap.height();
btn->setIcon(QIcon(pixmap.copy(QRect(state * nWidth, 0, nWidth, nHeight))));
btn->setIconSize(QSize(nWidth, nHeight));
}
bool Preview360::eventFilter(QObject *target, QEvent *event)
{
EButtonMouseState state = EButtonMouseNone;
//对几种事件进行处理,这下载对Qt的事件过滤器,很清楚了,实践结合理论=...
if (target == m_pButtonClose)
{
if (event->type() == QEvent::Enter)
{
state = EButtonMouseEnter;
}
else if (event->type() == QEvent::Leave)
{
state = EButtonMouseDefault;
}
else if (((QMouseEvent *)event)->button() == Qt::LeftButton)
{
if (event->type() == QEvent::MouseButtonPress)
{
state = EButtonMousePress;
//若点击在关闭按钮上,不拖动图像
m_mousePressFlag = false;
}
else if (event->type() == QEvent::MouseButtonRelease)
{
state = EButtonMouseDefault;
}
}
if (state != EButtonMouseNone)
{
setButtonIcon((QToolButton *)target, state);
}
}
//处理完自定义拦截的