转:QT实现阴影窗口(一)

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);

 

      实现效果如图:

     

      这是实现的第一步,但这时窗口是无法用鼠标拖动的,而且也没有最大化、最小化、关闭等按钮了,因为这是一个无标题窗口。更详细的实现将在下一篇进行分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值