让Qt自定义窗口边界可以拉伸

qt去掉外边框以后 边界不能拉伸。

第一。根据mouseevent事件到达边界的时候自己处理 通过resize(来设置) 这种需要写的代码较多


windows平台上有更简版的方法。

处理winevent里面的 WM_NCHITTEST


switch(message->message)  
{  
case WM_NCHITTEST:
int xPos = GET_X_LPARAM(message->lParam) - this->frameGeometry().x();
int yPos = GET_Y_LPARAM(message->lParam) - this->frameGeometry().y();
if(this->childAt(xPos,yPos) == 0)  
{  

//如果当前的位置没有子widget 那么返回HTCAPTION.也就是可以单击自由移动位置
*result = HTCAPTION;  
}
else
{
return false;
}
if(xPos >= 0 && xPos < LEFTSPACE)  
*result = HTLEFT;   //左边界
if(xPos > (this->width() - RIGHTSPACE))  
*result = HTRIGHT; //右边界
if(yPos > (this->height() - BOTTOMSPCAE))  
*result = HTBOTTOM;  //下边界
if(xPos >=0 && xPos < LEFTSPACE && yPos >(this->height()-RIGHTSPACE))  
*result = HTBOTTOMLEFT;  //左下
if(xPos > (this->width() - RIGHTSPACE) && yPos > (this->height() - BOTTOMSPCAE) )  
*result = HTBOTTOMRIGHT;  //右下


还有左上右上。这里没有写。

我们已经处理过了。返回true
return true;  
}

交给原来的处理。返回false.
return false;

你可能感兴趣的:(QT一些理解)