Qt 9 palace map implements the window shadow and qt palace Map window shadow
<Pre name = "code" class = "cpp"> # include <QBoxLayout> # include <QPalette> # include <QGraphicsDropShadowEffect> # include <QDebug> # include <QSizePolicy> # include <QPainter> # include "bfwidget. h "// users // ----------- Created with 010 Editor ----------- // ------ www.sweetscape.com/010editor/ ------ // File: G: \ project \ Sample \ ShadeWindow \ box-shadow.png // Address: 0 (0x0) // Size: 588 (0x24C) // returns unsigned char _ hexData [588] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x1D, 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0x93, 0x67, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47,0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00,0x00, 0x06, 0x62, 0x4B, 0x47, 0x44, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xA0, 0xBD, 0xA7, 0x93,0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73,0x00, 0x00, 0x0D, 0xD7, 0x00, 0x00, 0x0D, 0xD7, 0x01, 0x42, 0x28, 0x9B, 0x78, 0x00, 0x00, 0x00,0x07, 0x74, 0x49, 0x4D, 0x45, 0x07, 0xDA, 0x03, 0x0A, 0x01, 0x3B, 0x39, 0x35, 0x19, 0x02, 0x5A, 0x00, 0x00, 0x00, 0x22, 0x74, 0x45, 0x58, 0x43, 0x6F, 0x6D, 0x6D, 0x65, 0x6E, 0x74, 0 x, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4D, 0x50, 0x20, 0x6F, 0x6E, 0x20, 0x61, 0x20, 0x4D, 0x61, 0x63, 0x87, 0xA8, 0x77, 0x43, 0x00, 0x00,0x01, 0x9E, 0x49, 0x44, 0x41, 0x54, 0x48, 0xC7, 0xED, 0x97, 0xDD, 0x4E, 0xC2, 0x30, 0x18, 0x86, 0x9F, 0xD6, 0x2D, 0x28, 0x18, 0x34, 0x72, 0xE2, 0x9D, 0x79, 0x8D, 0xDC, 0x9C, 0x3F, 0x84, 0x09,0x64, 0x6C, 0xF5, 0xE4, 0x1D, 0xF9, 0xA8, 0x1D, 0x76, 0x80, 0xEE, 0xC4, 0x25, 0x4D, 0xB7, 0xA6, 0xED, 0xD3, 0xF7, 0xEB, 0xCF, 0xDB, 0x39, 0xFA, 0x1F, 0xC7, 0x75, 0x9E, 0x90, 0xD3, 0xB1, 0x8B, 0xDE, 0xDD, 0x05, 0xB0, 0x90, 0x82, 0x17, 0x09,0x98, 0x03, 0xBC, 0x01, 0xFA, 0x33, 0xA1, 0xAD, 0x01, 0xB7, 0x16, 0x5E, 0x24, 0x54, 0xDE, 0x28, 0x15, 0xE6, 0xDD, 0x9F, 0x01, 0x6C, 0x94, 0xF6, 0xE6, 0x3D, 0x58, 0xA5, 0xCE, 0x00, 0x4B, 0x60, 0x02, 0xDC, 0x2A, 0x2F, 0x55, 0x9E, 0x13, 0xEA, 0x4E, 0x59, 0x03, 0xD4, 0xC0, 0x0E, 0xD8, 0x2A, 0x47, 0xE5, 0x47, 0xE1, 0xF5, 0xEA, 0x7C, 0x02, 0xDC, 0x03, 0x73, 0xE5, 0x77, 0x02, 0xFB, 0x4C, 0x68, 0x2B, 0xE0, 0x06, 0x58, 0x03, 0xAB, 0x28, 0xDC, 0x4D, 0x11, 0xCD, 0x65, 0x21, 0x85, 0x0F, 0xC0, 0x02, 0x78, 0x12, 0x7C, 0x92, 0xA1, 0xD6, 0xAA, 0xDC, 0x09, 0xF6, 0xAA, 0xFA, 0x7B, 0x0D, 0xA4, 0xE9, 0x0B, 0xEF, 0x04, 0x98, 0x09, 0xF8, 0x0C, 0x3C, 0x02, 0x53, 0xD5, 0xCD, 0x81, 0xEE, 0x81, 0x4F, 0xB5, 0x41, 0xE1, 0x5D, 0xAB, 0xCC, 0x01, 0xAE, 0x48, 0x2C, 0xA2, 0x52, 0x21, 0x9D, 0x0B, 0xB8, 0x50, 0x98, 0xCB, 0x4C, 0x68, 0x2D, 0x08, 0x02, 0xBD, 0x45, 0xEB, 0xE2, 0x9B, 0x52, 0x1F, 0x2D, 0xA6, 0xA9, 0x54, 0xCF, 0x32, 0xE6, 0xD5, 0xCE, 0x67, 0xD0, 0x9C, 0xDA, 0x85, 0xE8, 0x53, 0x4A, 0xFB, 0xB6, 0x4D, 0xA9, 0xF4, 0x92, 0xB9, 0x5D, 0x96, 0xAA, 0x6F, 0xB7, 0xDC, 0xD1, 0x40, 0xFD, 0x89, 0x13, 0xC9, 0xAA, 0x1F, 0xB2, 0x4F, 0x7D, 0x74, 0xB8, 0x90, 0x03, 0x8D, 0x8F, 0xC0, 0xA1, 0x47, 0xE1, 0x8F, 0xED, 0x3C, 0x23, 0x3C, 0xFF, 0xD0, 0xD1, 0xA0, 0x21, 0x4A, 0x43, 0x7D, 0xB4, 0xB7, 0x9D, 0x3F, 0xE1, 0xF4, 0xD6, 0x0B, 0xDB, 0x81, 0xB6, 0xD6, 0x46, 0xD0, 0x23,0x78, 0xD1, 0x03, 0xB5, 0x5E, 0x58, 0x2B, 0x2D, 0x07, 0x9C, 0x48, 0x75, 0xCA, 0x47, 0x63, 0xA8, 0x55, 0x65, 0xBD, 0xF0, 0x13, 0xA8, 0x04, 0x1A, 0x72, 0xF6, 0x56, 0x6A, 0xBB, 0x33, 0xEE, 0x72,0x50, 0x5F, 0x24, 0x14, 0x76, 0x5E, 0xB8, 0x32, 0x4E, 0xB1, 0x39, 0xC3, 0x65, 0xDE, 0xD5, 0xC7, 0xC6, 0x80, 0x43, 0x4A, 0x69, 0xE7, 0x85, 0x95, 0xBC, 0xB0, 0x73, 0x8A, 0x4B, 0xFC, 0xB4, 0xD2, 0x77, 0x63, 0x95, 0x06, 0x75, 0xD4, 0x8D, 0x72, 0x0B, 0x7C, 0xE8, 0x7B, 0x6B, 0xAC, 0xE9, 0x92, 0x9B, 0xC3, 0x56, 0x7D, 0x87, 0x78, 0x21, 0xB5, 0x66, 0x94, 0xA8, 0x52, 0x75, 0xC5, 0x3B, 0x52,0x37, 0xAF, 0xC9, 0x3B, 0xEE, 0x6F, 0xDF, 0x06,0x83, 0xFB, 0xC3, 0x7B, 0xEF, 0x61, 0xCF, 0x8E, 0x72, 0xC3, 0x77, 0x63, 0xFC, 0xCB, 0x7C, 0x01, 0x3F, 0xD0, 0xC3, 0x34, 0xFA, 0xD4, 0x35, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82}; const QPixmap _ DrawNinePatch (QSize szDst, const QPixmap & srcPix) {// draw the background image, QPixmap dstPix (szDst); dstPix. fill (QColor (255,255,255, 0); QPainter painter; painter. begin (& dstPix); int nW = szDst. width (); int nH = szDst. height (); int nWBg = srcPix. width (); int nHBg = srcPix. height (); QPoint m_ptBgLT (10, 10); QPoint m_ptBgRB (19, 19); QPoint ptDstLT (m_ptBgLT.x (), m_ptBgLT.y ()); QPoint ptDstRB (nW-(nWBg-m_ptBgRB.x (), nH-(nHBg-m_ptBgRB.y (); // LTpainter. drawPixmap (QRect (0, 0, ptDstLT. x (), ptDstLT. y (), srcPix, QRect (0, 0, m_ptBgLT.x (), m_ptBgLT.y (); // MTpainter. drawPixmap (QRect (ptDstLT. x (), 0, ptDstRB. x ()-ptDstLT. x (), ptDstLT. y (), srcPix, QRect (m_ptBgLT.x (), 0, m_ptBgRB.x ()-m_ptBgLT.x (), m_ptBgLT.y (); // RTpainter. drawPixmap (QRect (ptDstRB. x (), 0, nW-ptDstRB. x (), ptDstLT. y (), srcPix, QRect (m_ptBgRB.x (), 0, nWBg-m_ptBgRB.x (), m_ptBgLT.y (); // LMpainter. drawPixmap (QRect (0, ptDstLT. y (), ptDstLT. x (), ptDstRB. y ()-ptDstLT. y (), srcPix, QRect (0, m_ptBgLT.y (), m_ptBgLT.x (), m_ptBgRB.y ()-m_ptBgLT.y (); // matrix. drawPixmap (QRect (ptDstLT. x (), ptDstLT. y (), ptDstRB. x ()-ptDstLT. x (), ptDstRB. y ()-ptDstLT. y (), srcPix, QRect (m_ptBgLT.x (), m_ptBgLT.y (), m_ptBgRB.x ()-convert (), convert ()-m_ptBgLT.y (); // RMpainter. drawPixmap (QRect (ptDstRB. x (), ptDstLT. y (), nW-ptDstRB. x (), ptDstRB. y ()-ptDstLT. y (), srcPix, QRect (m_ptBgRB.x (), m_ptBgLT.y (), nWBg-m_ptBgRB.x (), merge ()-m_ptBgLT.y (); // LBpainter. drawPixmap (QRect (0, ptDstRB. y (), ptDstLT. x (), nH-ptDstRB. y (), srcPix, QRect (0, m_ptBgRB.y (), m_ptBgLT.x (), nHBg-m_ptBgRB.y (); // MBpainter. drawPixmap (QRect (ptDstLT. x (), ptDstRB. y (), ptDstRB. x ()-ptDstLT. x (), nH-ptDstRB. y (), srcPix, QRect (m_ptBgLT.x (), m_ptBgRB.y (), m_ptBgRB.x ()-convert (), nHBg-m_ptBgRB.y (); // RBpainter. drawPixmap (QRect (ptDstRB. x (), ptDstRB. y (), nW-ptDstRB. x (), nH-ptDstRB. y (), srcPix, QRect (m_ptBgRB.x (), m_ptBgRB.y (), nWBg-m_ptBgRB.x (), nHBg-m_ptBgRB.y (); painter. end (); return dstPix;} BFWidget: BFWidget (QWidget * parent): QDialog (parent) {// load shadow _ pixShadow. loadFromData (_ hexData, 588); // _ pixShadow. load ("box-shadow.png"); this-> setWindowFlags (Qt: FramelessWindowHint); this-> setAttribute (Qt: WA_TranslucentBackground ); this-> resize (600 + 12,400 + 12); this-> setContentsMargins (6, 6, 6);} void BFWidget: mousePressEvent (QMouseEvent * event) {// only move the left mouse button and change the size if (event-> button () = Qt: LeftButton) {mouse_press = true ;} // window movement distance move_point = event-> globalPos ()-pos ();} void BFWidget: mouseReleaseEvent (QMouseEvent *) {mouse_press = false;} void BFWidget :: mouseMoveEvent (QMouseEvent * event) {// move the window if (mouse_press) {QPoint move_pos = event-> globalPos (); move (move_pos-move_point);} // void BFWidget:: resizeEvent (QResizeEvent * event) // {// QSize size = event-> size (); // container-> setGeometry (5, 5, size. width ()-10, size. height ()-10); // qDebug () <container-> rect (); //} void BFWidget: paintEvent (QPaintEvent * event) {QPainter painter (this); static QColor colItemBg (255,255,255); // Default background color QSize szThis = this-> rect (). size (); QPixmap pixShadowBg = _ DrawNinePatch (szThis, _ pixShadow); // pixShadowBg. save ("c:/pixShadowBg1.png"); painter. drawPixmap (this-> rect (), pixShadowBg); painter. setPen (colItemBg); // You need to draw a background. Otherwise, it will penetrate through painter. setBrush (colItemBg); painter. drawRect (6, 6, szThis. width ()-6*2, szThis. height ()-6*2); // this-> setMask (pixShadowBg. mask (); // sets the rounded corner}
# Ifndef BFWIDGET_H # define BFWIDGET_H # include <QWidget> # include <QDialog> # include <QMouseEvent> # include <QResizeEvent>/*** you can drag the * window to increase the shadow effect *@ brief The BFWidget class */class BFWidget: public QDialog {Q_OBJECTpublic: explicit BFWidget (QWidget * parent = 0); signals: public slots: protected: void mousePressEvent (QMouseEvent * event); void mouseReleaseEvent (QMouseEvent * event ); void mouseMoveEvent (QMouseEvent * event); // void resizeEvent (QResizeEvent * event); void paintEvent (QPaintEvent * event); private: // QPixmap _ pixShadow; // shadow image QPoint move_point; // The moving distance from bool mouse_press; // press the left mouse button}; # endif // BFWIDGET_H