Qt 无边透明窗口

未设置的窗口

    this->setWindowFlag(Qt::FramelessWindowHint); // 隐藏标题栏
    this->setAttribute(Qt::WA_TranslucentBackground,true);    //设置窗口透明

        这样设置窗口后,会导致无法拖动窗口。

        可以通过重写QWidget的鼠标事件函数来解决:

void frameless::mousePressEvent(QMouseEvent *event)
{
    QPoint mousePos = event->globalPos(); //获取鼠标相对与屏幕的坐标
    QPoint topLeft = this->geometry().topLeft(); //获取窗口左上角坐标
    winPos = mousePos - topLeft; //获取鼠标相对于窗口左上角的坐标
}

        在鼠标按下的那一刻,获取鼠标相对屏幕的坐标减去窗口左上角在屏幕中的坐标,得到鼠标相对与窗口左上角的坐标

void frameless::mouseMoveEvent(QMouseEvent *event)
{
    QPoint mousePos = event->globalPos(); //获取鼠标相对与屏幕的坐标
    this->move(mousePos - winPos); //移动窗口
}

        在鼠标移动的过程中持续不断获取并更新鼠标的位置,用移动中的坐标减去,按下时的坐标就可以根据这个值来更新窗口的位置。

void frameless::mouseMoveEvent(QMouseEvent *event)
{
    QPoint mousePos = event->globalPosition().toPoint(); //获取鼠标相对与屏幕的坐标
    this->move(mousePos - winPos); //移动窗口
}

然后就可以点击窗口中的像素点就可以拖动窗口移动了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值