x();   ..."/>
溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

<Qt C++>無邊框窗口實(shí)現(xiàn)拖拽縮放

發(fā)布時(shí)間:2020-05-13 09:29:12 來源:網(wǎng)絡(luò) 閱讀:1786 作者:kayseloy 欄目:軟件技術(shù)

怎么讓窗口無邊框blabla的就不寫啦

//.cpp

void Dialog::mousePressEvent(QMouseEvent *event)
{
    px=event->x();
    py=event->y();//記錄鼠標(biāo)相對(duì)窗口坐標(biāo)
    pxx=geometry().width();//窗口寬度
    pyy=geometry().height();//窗口高度
    hx=geometry().x();
        hy=geometry().y();//記錄鼠標(biāo)按下時(shí)窗口屬性,窗口左上點(diǎn)坐標(biāo)(hx,hy)
       kx=cursor().pos().x();
       ky=cursor().pos().y();//記錄鼠標(biāo)全局坐標(biāo)(大概有別的記錄鼠標(biāo)的方法但是我不會(huì)QwQ
       update();
}
void Dialog::mouseMoveEvent(QMouseEvent *event)
{
    if(px>pxx-10&&px<pxx&&py<pyy-10&&py>=0)//橫向(拉寬
    {
       this->setGeometry(hx,hy,pxx+event->x()-px,pyy);
    }
    if(py>pyy-10&&py<pyy&&px<pxx-10&&px>=0)//縱向(拉長(zhǎng)
    {
        this->setGeometry(hx,hy,pxx,pyy+event->y()-py);
    }
    if(py>pyy-10&&py<pyy&&px>pxx-10&&px<pxx)//右下角(拉長(zhǎng)、寬
     {
        this->setGeometry(hx,hy,pxx+event->x()-px,pyy+event->y()-py);
     }
    if(px>0&&px<pxx-10&&py>0&&py<pyy-10)//中間區(qū)域(拖拽
     {
        this->setGeometry(hx+cursor().pos().x()-kx,hy+cursor().pos().y()-ky,pxx,pyy);
     }//對(duì)于拉長(zhǎng)拉寬,用相對(duì)窗口的坐標(biāo)和相對(duì)屏幕坐標(biāo)應(yīng)該都是可以的,但是拖拽操作只能用相對(duì)屏幕的坐標(biāo)計(jì)算
update();
}

反正就是記錄鼠標(biāo)點(diǎn)到拖拽縮放觸發(fā)區(qū)域(這里定的縮放區(qū)域在距離窗口最右和最下端10pixel的部分,拖拽區(qū)域在除了縮放區(qū)域的部分)時(shí)候的坐標(biāo)然后記錄鼠標(biāo)點(diǎn)住然后移動(dòng)時(shí)候的坐標(biāo),再加加減減就弄出來了。_  。 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI