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

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

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


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

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

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

而在黑色背景时,拖出的虚线框是白色的

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

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

1) 调用win库来实现

2) 自己动手写一个

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

 

3.虚线框类代码
DragShadow.h

#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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydzgy.html