赞
踩
在窗口上悬浮鼠标,此时窗口标题栏显示,窗口变大,鼠标移开后,窗口恢复原来的大小,标题栏隐藏。
直接上代码,只包含只要的代码部分。
在自定义的窗口中重写鼠标进入事件enterEvent和鼠标离开事件leaveEvent,在其内部实现窗口的变大,恢复。
在构造函数中将标题栏隐藏。
ui->titleWidget为自定义标题栏。
ui->titleWidget->hide();
//变量定义 QRect m_oldSizePos;//保存之前的窗口大小 bool m_isFloatWin;//是否有窗口浮动 #define BASE_W 1920//基本屏幕分辨率 #define BASE_H 1080 #define FLOATWIN_RANGE 800//悬浮窗口的区域为800x800的矩形框内呈现悬浮窗口 //其中 m_percentW = (qreal)BASE_W / screen.width(); // m_percentH = (qreal)BASE_H / screen.height();为 //1920x1080与当前屏幕分辨率的比值, void CustomWidget::enterEvent(QEvent *event) { ui->titleWidget->show();//标题栏显示 //保存原来的窗口大小位置 m_oldSizePos = geometry(); //获取窗口左上角坐标(场景坐标) QRect rectWin = geometry(); outPut<<"矩形的宽:"<<rectWin.width()<<"高:"<<rectWin.height()<<"x:"<<rectWin.x()<<"y:"<<rectWin.y(); //求出窗口宽高的最大值 int max = rectWin.width() > rectWin.height() ? rectWin.width():rectWin.height(); //最大值是否小于浮动窗口的区域,小于出现浮动窗口,大于不需要出现浮动窗口 if(max < FLOATWIN_RANGE)//FLOATWIN_RANGE一个宏,值为700,可以自己设 { max = FLOATWIN_RANGE;//最长的边为700 int otherLen;//另一边长 if(rectWin.width() >= rectWin.height())//宽大与高 { otherLen = (float)FLOATWIN_RANGE / rectWin.width() * rectWin.height(); rectWin.setWidth(max); rectWin.setHeight(otherLen); } else//高大于宽 { otherLen = (float)FLOATWIN_RANGE / rectWin.height() * rectWin.width(); rectWin.setWidth(otherLen); rectWin.setHeight(max); } if(rectWin.x() + rectWin.width() > SCENE_W / m_percentW) { rectWin.moveLeft(SCENE_W / m_percentW - rectWin.width());//setX会改变矩形的宽所以没有使用 } if(rectWin.y() + rectWin.height() > SCENE_H / m_percentH) { rectWin.moveTop(SCENE_H /m_percentH - rectWin.height());//设置y值 } setGeometry(rectWin);//设置变大后窗口的大小 m_isFloatWin = true; outPut<<"矩形放大后宽:"<<rectWin.width()<<"高:"<<rectWin.height()<<"x:"<<rectWin.x()<<"y:"<<rectWin.y(); } } void CustomWidget::leaveEvent(QEvent *event) { ui->titleWidget->hide();//隐藏标题栏 if(m_isFloatWin) { //窗口恢复大小 setGeometry(m_oldSizePos);//窗口恢复之前的大小 outPut<<"矩形恢复之前的宽:"<<m_oldSizePos.width()<<"高:"<<m_oldSizePos.height()<<"x:"<<m_oldSizePos.x()<<"y:"<<m_oldSizePos.y(); m_isFloatWin = false; } }
以上可以将原来的窗口在鼠标悬浮时放大并显示标题栏,鼠标移开窗口,窗口恢复之前的大小。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。