1. 程式人生 > >讓Qt自定義視窗邊界可以拉伸

讓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;