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

xiaoxiao2021-02-28  124

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

}

转载请注明原文地址: https://www.6miu.com/read-63718.html

最新回复(0)