看到很多才学QT的人都会问为啥无边框拖动为啥会花屏?
那是因为你每次拖动的过程中都一直在调用move()函数让QT重新绘制界面,如果资源过大,就会导致当前图形还未绘制完,便又重新改变坐标了,从而导致花屏.
2.如何解决
我们参考其它软件,比如QQ,浏览器等,可以看到我们如果在拖动它们的时候,会出现一个虚线框.
如下图所示,可以看到在白色背景下,拖出的虚线框是黑色的
而在黑色背景时,拖出的虚线框是白色的
显然这个虚线框会根据当前桌面的像素点而去取反(也就是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