针对自定义标题栏拖动效果问题解决

来源:互联网 发布:java 工作流设计器 编辑:程序博客网 时间:2024/06/05 02:07

工作中需要用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 中,

voidTitleBar::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 中的拖动办法,但是出现线标题栏随界面拉伸重影问题,

修改

voidTitleBar::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

}





















0 0
原创粉丝点击