Qt在隐藏边框模式下怎么移动窗口?

   日期:2020-05-04     浏览:102    评论:0    
核心提示:Qt在隐藏边框模式下怎么移动窗口?// 首先在窗口头文件中重载 paintEventprotecte

Qt在隐藏边框模式下怎么移动窗口?

// 首先在窗口头文件中重载 paintEvent
protected:
    void paintEvent(QPaintEvent *event);

// 在 .cpp 文件中
// 重载 painterEvent
void Widget::paintEvent(QPaintEvent *event){
    
    // 创建画笔, 并指定到窗口
    QPainter p(this);
    // 载入图片
    QImage image;
    image.load("../Image/tofu.png");	//自己指定图片路径 ../为上一级目录
	// 画出图片
    p.drawImage(0, 0, image);
}

现在的效果:

接下来我们把边框隐藏, 并将背景设置为透明

// 在窗口的构造函数中

// 将边框去除 windowFlags() 是把原先有的属性也添加上
setWindowFlags(Qt::FramelessWindowHint | windowFlags());

// 将窗口背景设置为透明
setAttribute(Qt::WA_TranslucentBackground);

现在的效果:

这样我们发现我们没法移动窗口对吧, 下面我们来处理这个移动问题
我们用 鼠标单击 来实现移动

分析: 需要重载鼠标单击鼠标移动事件

// 还是在窗口头文件中重载 mousePressEvent 和 mouseMoveEvent
protected:	//放在和上次一样的属性里面就可以的
    void mouseMoveEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);

// 还需要添加一个私有变量, 用于保存坐标差值
private:
    QPoint coordinate;

// 在 .cpp 文件中

// 鼠标左键触发
void Widget::mousePressEvent(QMouseEvent *event){

    // 判断鼠标左键
    if(event->button() == Qt::LeftButton){

        // 求坐标差值, 具体分析放后面
        coordinate = event->globalPos() - this->frameGeometry().topLeft();
    }

}

// 鼠标移动触发
void Widget::mouseMoveEvent(QMouseEvent *event){
    
    // 判断左键(Qt::LeftButton)是否被按下, 只有按下了才返回1(true)
    if(event->buttons() & Qt::LeftButton){
        
        // 移动窗口
        move(event->globalPos() - coordinate);

    }

}
// 怕有人不清楚, 我们在 .cpp 中要记得加头文件
#include <QPainter>		//画笔
#include <QImage>		//图片加载
#include <QMouseEvent>	//鼠标事件

现在, 我们的窗口就可以单击移动了! 另外需要的话要自己加个退出键哦

下面分析下关于坐标差值窗口定位的问题:

好了! 感谢各位的阅读, 希望我的文章对您有帮助.

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服