博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt实现类似qq的阴影窗体
阅读量:2238 次
发布时间:2019-05-09

本文共 2544 字,大约阅读时间需要 8 分钟。

#ifndef BFWIDGET_H#define BFWIDGET_H#include 
#include
#include
/** * 窗口可以拖动 * 窗口增加阴影效果 * @brief The BFWidget class */class BFWidget : public QWidget{ Q_OBJECTpublic: explicit BFWidget(QWidget *parent = 0); /** * 重写空间排版设置 * 把空间排版到central_widget上面 * @brief setLayout * @param layout */ void setLayout(QLayout * layout);signals:public slots:protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); //void resizeEvent(QResizeEvent *event);private: //显示内容的区域 QWidget *central_widget; QPoint move_point; //移动的距离 bool mouse_press; //按下鼠标左键};#endif // BFWIDGET_H
#include 
#include
#include
#include
#include
#include "bfwidget.h"BFWidget::BFWidget(QWidget *parent) : QWidget(parent){ setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); central_widget = new QWidget(); central_widget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); 水平方向和垂直方向任意伸展 QPalette palette; palette.setBrush(QPalette::Background,QBrush(QColor(255,255,255))); central_widget->setPalette(palette); central_widget->setAutoFillBackground(true); QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(); shadow_effect->setBlurRadius(10.0); shadow_effect->setColor(QColor(0, 0, 0, 100)); shadow_effect->setOffset(1.0); central_widget->setGraphicsEffect(shadow_effect); QVBoxLayout * main_layout = new QVBoxLayout(); main_layout->addWidget(central_widget, Qt::AlignCenter); main_layout->addSpacing(0); main_layout->setContentsMargins(5,5,5,5); QWidget::setLayout(main_layout);}void BFWidget::setLayout(QLayout *layout){ central_widget->setLayout(layout);}void BFWidget::mousePressEvent( QMouseEvent * event ){ //只能是鼠标左键移动和改变大小 if(event->button() == Qt::LeftButton) { mouse_press = true; } //窗口移动距离 move_point = event->globalPos() - pos();}void BFWidget::mouseReleaseEvent(QMouseEvent *){ mouse_press = false;}void BFWidget::mouseMoveEvent(QMouseEvent *event){ //移动窗口 if(mouse_press) { QPoint move_pos = event->globalPos(); move(move_pos - move_point); }}//void BFWidget::resizeEvent(QResizeEvent *event)//{// QSize size = event->size();// central_widget->setGeometry(5, 5, size.width() - 10, size.height() - 10);// qDebug() << central_widget->rect();//}

转载地址:http://kvabb.baihongyu.com/

你可能感兴趣的文章
为什么在优化算法中使用指数加权平均
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
查看>>
Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
查看>>