qt实现类似qq的阴影窗体

#ifndef BFWIDGET_H
#define BFWIDGET_H

#include <QWidget>
#include <QMouseEvent>
#include <QResizeEvent>

/**
 * 窗口可以拖动
 * 窗口增加阴影效果
 * @brief The BFWidget class
 */
class BFWidget : public QWidget
{
    Q_OBJECT
public:
    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
<pre name="code" class="cpp">#include <QBoxLayout>
#include <QPalette>
#include <QGraphicsDropShadowEffect>
#include <QDebug>
#include <QSizePolicy>

#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();
//}
				
时间: 2024-10-13 22:05:38

qt实现类似qq的阴影窗体的相关文章

qt实现类似QQ伸缩窗口--鼠标事件应用

上一章节讲了qt鼠标事件实现,获取鼠标参数的方法.这一讲主要讲怎么应用上讲的鼠标事件实现一个小功能. qq好友对话框右侧 未展开时如图: 鼠标移动到 “隐藏侧边”处单击可以隐藏侧边,隐藏后效果如图: 实现的范例效果如下 1.一般情况 2.鼠标移动到中间分割线中间区域时,效果 3.单击红色按钮后,效果 4.鼠标移动到边界,效果 下面讲解实现过程:一般情况在QT中,这种伸缩窗体的实现有两种方法:一种是是直接用QSplitter分割器实现:另一种直接用布局管理器自己实现.本节用的是第二种方法实现的.布

基于Qt的类似QQ好友列表抽屉效果的实现

前段时间在忙毕业设计,所以一直没有更新博客.今天答辩完以后,将对我的毕业设计进行模块展示,供Qt初学者进行参考. 毕业设计题目:Linux系统下基于Qt的局域网即时通信系统设计与实现 其中我有一个类似于QQ的好友列表,然后对好友可以进行分组管理,毕设中具体效果图如下: 网上查寻到的设计思路: 1.采用QToolBox的方式,虽然看起来有点样子,但是并不是我们所熟悉的好友列表,比如:http://blog.csdn.net/qianguozheng/article/details/6719074

C#实现类似QQ的隐藏浮动窗体、消息闪动

功能简介 当语音客服系统登录成功进入主界面时,本聊天工具将会自动隐藏在左下角位置,当鼠标移动到左下角时,自动弹出,当鼠标移开聊天窗体时,自动隐藏.如果想让聊天窗体固定在桌面,只要拖动一下聊天窗口,让它不停留在边界位置就可以了.隐藏和悬浮方式类型QQ. 1. 系统主界面 当点击最小化按钮时, 在电脑右下角会显示任务图标,点击任务图标,将会在左下角位置弹出. 主界面各部分介绍: a) 消息列表:该区域的功能主要是显示消息记录. b) 发送消息:输入要发送的消息进行发送,默认群聊,输入消息后,按回车键

winform-实现类似QQ停靠桌面上边缘隐藏的效果

//实现类似QQ停靠桌面上边缘隐藏的效果! private void timer1_Tick(object sender, EventArgs e) { System.Drawing.Point pp = new Point(Cursor.Position.X, Cursor.Position.Y);//获取鼠标在屏幕的坐标点 Rectangle Rects = new Rectangle(this.Left, this.Top, this.Left + this.Width, this.Top

基于Qt的类QQ气泡聊天的界面开发

最近在写IM 聊天界面,想设计出一个类似QQ气泡聊天的样式 使用了几种办法 1:使用Qt下面的QListview来实现QQ类似效果,差强人意 2:使用QWebview加载html css样式来完成,发现效果不错,但是毕竟webview占用巨大的内存 3:使用QTextBrower加载css,但是好像只支持css2.1版本,css3完全不支持,这样的话,花哨的样式应该是无法实现 基于以上三种思路 最后发现还是QML实现比较好,但是qml基于文本与动画图片混合显示没找到好的办法,有好的办法的希望可以

QTabWidget 实现类似QQ聊天窗口(拖动分离出新的窗口)

新版本的QQ聊天窗口可以实现拖动,分离出新的窗口.浏览器等软件也可以实现类似操作.所以心血来潮想用Qt实现类似的功能.想用QTabWidget直接实现是很难的,仔细阅读源码,发现QTabWidget内部是由QStackedWidget和QTabBar组合实现的.所以很自然的想到,只要继承QTabBar的子类重新实现QTabBar的 [cpp] view plain copy void mousePressEvent (QMouseEvent *e); void mouseMoveEvent (Q

WinForm实现类似QQ停靠,显示隐藏过程添加特效效果

原文:WinForm实现类似QQ停靠,显示隐藏过程添加特效效果 这可能是个老题长谈的问题了,只是在项目中会用到这个效果,所以今天做个记录.大家见了别喷我.在项目中的需求是这样的. 打开程序,在屏幕的右下角会显示一个窗体,一般情况下该窗体会隐藏停靠在右边,只露出很小部分,当鼠标移动到这个很小部分时,窗体全部显示,显示过程是从右边滑动到左边,当鼠标离开窗体时,窗体需要隐藏在右边,只露出很小部分,隐藏过程是从左边滑动到右边. 实现此类效果我碰到的连个难点是:1.如何判断鼠标离开了窗体?2.窗体显示隐藏

C#如何实现类似QQ那样靠边隐藏的功能

http://www.cnblogs.com/yechensi/archive/2009/08/02/1537145.html C#如何实现类似QQ那样靠边隐藏的功能 你想过为自己的程序添加靠边隐藏的功能吗?还在为计算窗体的大小及位置而烦恼吗?想这么简单的轻松调用吗? DockWindow.FormDockTemplate m_oDockFormTemplate = new DockWindow.FormDockTemplate(this); 不用吃惊,您只需要在你的窗体初始化的时候(也就是窗体

在类似qq或者微信聊天中。如何根据不同的手机发送图片

原文:在类似qq或者微信聊天中.如何根据不同的手机发送图片   前一段时间,公司自己要求做多客服开发,但是对于发送图片这一块,当时很苦恼,我用自己的手机(米2)测试,不管是本地,还是云相册,最新照片.都没有问题,但是测试那边一直说图片发不了,而且还会崩.很纳闷.      后来经过debug,发现4.4以上的手机,它的图片路径居然不一样,有file://开头的,也有content://开头的,还有/mnt/sdcard/开头的,坑爹啊,我自己的手机是4.1的,不一样.     4.4以前的路径都