今天做了一个QT悬浮按钮的样式,有几个比较重要的点,记录一下
首先,要求是设置一个悬浮的按钮,当鼠标移动到该窗体时,按钮显示;鼠标移出该窗体时,按钮隐藏。最重要的点是,按钮不能破坏之前的界面布局。
思路其实也比较简单,之前也有做过焦点移到到按钮显示提示图片,移出按钮则提示消失的问题,大致思路是一致的,主要方法是采取位置的偏移以达到显示的效果。具体代码如下:
mianwidget.cpp
TestWidget::TestWidget(QWidget * parent)
{
QVBoxlayout *pLayOut = new QVBoxlayout(this);
m_topWidget = new TopWidget(this);//上半部控件
m_bottomWidget = new BottomWidget(this);//下半部控件
pLayOut->addLayout(m_topWidget);
pLayOut->addLayout(m_bottomWidget);
m_pushbtn = new PushButton(this);//悬浮按钮
m_pushbtn->setFixSize(40,30);
m_pushbtn->hide();
}
TestWidget::enterEvent(QEvent *)//鼠标进入
{
if(m_pushbtn)
{
QPoint point = m_bottomWidget->pos();
point->rx = point->x()+m_bottomWidget.Width()-40;//按钮右边缘与widget边缘相接
point->ry = point->y()+m_bottomWidget.Height-30;//按钮下方与Widget边缘相接
m_pushbtn->move(point);
}
}
TestWidget::leaveEvent(QEvent *)//鼠标移开
{
if(m_pushbtn)
{
m_pushbtn->move(point);
}
}
这里的偏移为了直观,放一个示意图
写文不易,且行且珍惜:)