前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QT-解决无边框界面拖动卡屏问题(附带源码)

QT-解决无边框界面拖动卡屏问题(附带源码)

作者头像
诺谦
发布2019-05-24 20:39:00
2.3K0
发布2019-05-24 20:39:00
举报
文章被收录于专栏:Linux驱动Linux驱动

1.简介

  • 看到很多才学QT的人都会问为啥无边框拖动为啥会花屏?

那是因为你每次拖动的过程中都一直在调用move()函数让QT重新绘制界面,如果资源过大,就会导致当前图形还未绘制完,便又重新改变坐标了,从而导致花屏.

2.如何解决 我们参考其它软件,比如QQ,浏览器等,可以看到我们如果在拖动它们的时候,会出现一个虚线框.

  • 如下图所示,可以看到在白色背景下,拖出的虚线框是黑色的
  • 而在黑色背景时,拖出的虚线框是白色的

显然这个虚线框会根据当前桌面的像素点而去取反(也就是255-currentRGB). 解决的过程有两种方法:

  • 1) 调用win库来实现
  • 2) 自己动手写一个

既然我们已经知道它的实现过程.那我们还是自己动手写一个,只需要写一个虚线框类即可

3.虚线框类代码 DragShadow.h

代码语言:javascript
复制
#ifndef DRAGSHADOW_H
#define DRAGSHADOW_H
#include <QtGui>
class DragShadow : public QWidget
{
  Q_OBJECT
private:
  QImage m_image;
protected:
  bool getInvertColor(int x, int y, QColor &color);
  void paintEvent(QPaintEvent *);
  void showEvent( QShowEvent * event );
public:
  explicit DragShadow(QWidget *parent = 0);
  void setSizePos(int x, int y, int w, int h);
  void setPos(int x,int y );
  void setPos(QPoint pos );
signals:

public slots:

};
#endif // DRAGSHADOW_H

DragShadow.cpp

代码语言:javascript
复制
#include "DragShadow.h"

DragShadow::DragShadow(QWidget *parent) :
QWidget(NULL)
{
  setWindowFlags(Qt::FramelessWindowHint|Qt::Tool);
  setAttribute(Qt::WA_TranslucentBackground);
}

void DragShadow::setSizePos(int x, int y, int w, int h)
{
  if(w%2==0)
    w+=1;
  if(h%2==0)
    h+=1;
  this->setGeometry(x,y,w,h);
}

void DragShadow::setPos(int x,int y )
{
  this->move(x,y);
  this->update();
}

void DragShadow::setPos(QPoint pos )
{
  this->move(pos);
  this->update();
}

void DragShadow::showEvent( QShowEvent * event )
{

4.测试UI界面如下图所示

5.拖动时的效果图如下所示

6.针对实线框补充 对于有些不同的windows系统设置,实现的是实线框,如下图所示:

如果想要这种效果,就将上面代码的paintEvent(QPaintEvent *)函数的i+=2改为i++即可.

修改后效果如下所示:

上面的两个不同效果的demo源码地址如下所示:

https://download.csdn.net/download/qq_37997682/10955602

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-02-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档