工作中需要用Qt实现自定义标题栏,
参考http://blog.csdn.net/liang19890820/article/details/50555298 自定义标题栏;
窗体缩放http://blog.csdn.net/liang19890820/article/details/50557240
整合到一起
FramelessHelper *pHelper = new FramelessHelper(this);pHelper->activateOn(this); //激活当前窗体
pHelper->setTitleHeight(m_pTitleBar->height()); //设置窗体的标题栏高度
pHelper->setWidgetMovable(true); //设置窗体可移动
pHelper->setWidgetResizable(true); //设置窗体可缩放
pHelper->setRubberBandOnMove(true); //设置橡皮筋效果-可移动
pHelper->setRubberBandOnResize(true); //设置橡皮筋效果-可缩放
设置橡皮筋效果之后,发生拖动标题栏改变窗体大小之后,RubberBand没有在鼠标弹起之后消失,不可改变大小,无法弹出其他窗口(改窗口永远至于最前端,关闭不了)我的Qt版本是Qt4.8.4 也许是我其他程序设置的问题
我想在拖动的时候给其他界面传递信号,重载mousemoveEvent 发现没有作用,研究大神的代码
在自定义标题栏 http://blog.csdn.net/liang19890820/article/details/50555298 中,
void TitleBar::mousePressEvent(QMouseEvent *event)
{
#ifdef Q_OS_WIN
if (ReleaseCapture()) //在pressEvent 中使用该句,鼠标的move 、release事件就无法获取到
{
QWidget *pWindow = this->window();
if (pWindow->isTopLevel())
{
SendMessage(HWND(pWindow->winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
//该函数可以在拉伸窗体的时候 标题栏随着拉伸一起变化,同时不会引起自定义的(最大、最小、关闭)按钮重影
}
}
event->ignore();
#else#endif
}
想着采用 http://blog.csdn.net/GoForwardToStep/article/details/53494800 中的拖动办法,但是出现线标题栏随界面拉伸重影问题,
修改
void TitleBar::mousePressEvent(QMouseEvent *event)
{
#ifdef Q_OS_WIN
emit 点击信号,触发计时器,Qtimer 不断发送类似于拖动信号
if (ReleaseCapture()) //在pressEvent 中使用该句,鼠标的move 、release事件就无法获取到
{
QWidget *pWindow = this->window();
if (pWindow->isTopLevel())
{
SendMessage(HWND(pWindow->winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
//该函数可以在拉伸窗体的时候 标题栏随着拉伸一起变化,同时不会引起自定义的(最大、最小、关闭)按钮重影
emit 关闭计时器信号,停止发送类似于拖动信号
}
}
event->ignore();
#else#endif
}