方法一:

代码实现

在窗口构造函数中加入:setAttribute(Qt::WA_TranslucentBackground),保证不被绘制上的部分透明

重写void paintEvent(QPaintEvent *event);

void QT_Test::paintEvent(QPaintEvent *event)
{
QPainterPath path;
path.setFillRule(Qt::WindingFill);
path.addRect(, , this->width()-, this->height()-);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.fillPath(path, QBrush(Qt::white)); QColor color(, , , );
for(int i=; i<; i++)
{
QPainterPath path;
path.setFillRule(Qt::WindingFill);
path.addRect(-i, -i, this->width()-(-i)*, this->height()-(-i)*);
color.setAlpha( - qSqrt(i)*);
painter.setPen(color);
painter.drawPath(path);
}
}

方法二:

用代用阴影的背景图片实现

QT的窗口对于一般的窗口程序来说,已经完全够用了。但有时候我们要求界面比较精美,或者还想自定义皮肤之类的话,就需要自己定义窗口。这里介绍一种简单的自定义窗口的方法。

自定义样式可以达到很多的自定义皮肤的效果,但自定义样式有时不能指定窗口的形状,或者实现窗口的阴影效果(使用QT的QGraphicsEffect定义阴影,但运行效率较低)。这样的话可以重载窗口的paintEvent函数实现自绘制窗口。

先准备一张有窗口阴影的背景图,然后在paintEvent函数里面使用QPainterx绘制这张图。

这里将窗口类命名为GraphicDialog

示例代码如下:

class GraphicDialog :
public QDialog
{
public:
GraphicDialog(QWidget* parent = NULL, Qt::WindowFlags f = 0/* Qt::FramelessWindowHint*/);
~GraphicDialog(void);
protected:
void paintEvent(QPaintEvent *);
QPixmap background;
};

在窗口类构造函数中:

setWindowFlags(Qt::FramelessWindowHint); //无标题窗口
setAttribute(Qt::WA_TranslucentBackground);

background.load(":/Images/DialogBackground");
在paintEvent中

QPainter p(this);
p.drawPixmap(0, 0, rect().width(), rect().height(), background);

实现效果如图:

转载:http://twyok.blog.163.com/blog/static/812293032013215506418/

QT笔记之实现阴影窗口的更多相关文章

  1. Qt笔记——2.编写多窗口程序

    所学教程网址:http://www.qter.org/portal.php?mod=view&aid=27&page=2 设置按钮文字 MainWindow::MainWindow(Q ...

  2. QT添加程序图标及窗口图标

    程序图标 材料准备 图标文件:*.ico文件,存放在源文件同一目录下,如"myapp.ico" 写入图标 向*.pro文件中,独立一行写入"RC_ICONS = *.ic ...

  3. qt如何实现一个渐隐窗口呢(开启的时候他是从上往下渐渐显示)

    qt如何实现一个渐隐窗口呢?就是比如说开启的时候他是从上往下渐渐显示的,关闭的时候从下往上渐渐小时的http://stackoverflow.com/questions/19087822/how-to ...

  4. VC++界面编程之--阴影窗口的实现详解

    转载:http://blog.csdn.net/rmxming/article/details/11661365 对于我们这些控件狂来说,窗口阴影也是一个必不可少的实现需求.虽说其没多大用,但对于增加 ...

  5. Qt使用QStackedWidget实现堆栈窗口

    Qt使用QStackedWidget实现堆栈窗口 分类: QT2012-07-25 21:59 6997人阅读 评论(0) 收藏 举报 qtlistsignal 堆栈窗口可以根据选择项的不同显示不同的 ...

  6. Qt实现基本QMainWindow主窗口程序

    这个实验用Qt实现基本QMainWindow主窗口 先上实验效果图    打开一个文件,读取文件类容 详细步骤: 1.打开Qt creator新建MainWindow工程 右键工程名添加新文件,mai ...

  7. QT笔记之不规则窗口的实现

    QT实现的不规则窗口,是根据图片的形状显示 1.去标题栏 2.设置窗口背景为透明色 3.最后给窗口设置背景色 注:背景图为镂空的 格式为.png 图片资源下载:http://pan.baidu.com ...

  8. QT笔记之自定义窗口拖拽移动

    1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...

  9. Qt笔记之使用设计器自定义窗口标题栏

    1.在窗口显示之前,设置WindowFlags为FramelessWindowHint,以产生一个没有边界的窗口 例如 Widget::Widget(QWidget *parent) : QWidge ...

随机推荐

  1. oracle ebs request一直pending

    如果提交请求以后,状态一直是pending状态,可以在“工具”打开“Manager”,查看一下Maximum是否有设置错,另外pending的数量当前是多少. 如果Maximum是1,pending是 ...

  2. 关于teleport_pro使用过程中的一点疑惑

    在我新建工程的时候,有两个选项,一个是"new project wizard"另一个是"new project",然后就纠结了,我应该使用那个呢? 使用第一个的 ...

  3. 关于UIView(转)

    曾经有人这么说过,在iphone里你看到的,摸到的,都是UIView,所以UIView在iphone开发里具有非常重要的作用.那么UIView我们到底知道多少呢.请看看下面的问题, 如果这些你都知道, ...

  4. django view使用学习记录

    判断用户是否登录 request.user.is_authenticated()auth.authenticate(username=username, password=password)

  5. jsp页面的跳转取值

    <p >工单管理 >> <c:if test="${code eq 0}">全部工单>>详情页</c:if> <c ...

  6. asp显示记录条数

    Sql = "select * from xin126 where ID=" & id Rs.Open Sql,Conn,1,1 %> 共有<strong st ...

  7. Delphi中CoInitialize之探究

    CoInitialize(LPVOID),它将以特定参数调用CoInitializeEx,为当前单元初始化COM库,并标记协同模式为单线程模式.参数必须为NULL.这是关于OLE和COM的问题. Co ...

  8. 鸟哥的linux私房菜---非常好的linux基础网址【转】

    转自:http://linux.vbird.org/linux_basic/0320bash.php 在 Linux 的環境下,如果你不懂 bash 是什麼,那麼其他的東西就不用學了!因為前面幾章我們 ...

  9. 兼容IE, Chrome的ajax function

    gAjax.js var gAjax = (function () { /* paramObj:{ url: request url, method: GET or POST, encode: cha ...

  10. centos7.1-64bit延时截屏

    centos自带了截屏的软件,而且还能延时截屏. 在桌面左上角的应用程序菜单里: “应用程序”->“工具”->“截图” 设定延时秒数,点击“截图”按钮,开始截图. 完.