• 11353阅读
  • 5回复

[提问]如何实现主界面边框带阴影的效果【已解决】 [复制链接]

上一主题 下一主题
离线jonnystill7
 
只看楼主 倒序阅读 楼主  发表于: 2011-01-09
— 本帖被 XChinux 执行加亮操作(2011-01-10) —
我现有有一张边框带阴影效果图片
原始图


可是我在主界面显示这个图片的时候,阴影部分的边框都是显示黑色的。
程序运行图


为什么呢?
代码如下:
  1. Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
  2. {
  3.     ui->setupUi(this);
  4.     QPalette p = palette();
  5.     QPixmap img(":/img/bg.png");
  6.     p.setBrush(QPalette::Window, QBrush(img));
  7.     setPalette(p);
  8.     setMask(img.mask());
  9.     setWindowFlags(Qt::FramelessWindowHint);
  10. }

[ 此帖被jonnystill7在2011-01-09 22:07重新编辑 ]
离线jonnystill7
只看该作者 1楼 发表于: 2011-01-09
我在坛子里面找到这个帖子里面的方法只能解决图片本身不带阴影效果的问题
http://www.qtcn.org/bbs/read.php?tid=8681
不知道这种图片本身带阴影效果的怎么处理?
离线roywillow

只看该作者 2楼 发表于: 2011-01-09
mask好像本身是个bitmap,要么透明要么不透明

用paintEvent把这个图绘制到窗体上可能就行了,但是需要
setAttribute(Qt::WA_TranslucentBackground, true);
setWindowFlags(Qt::FramelessWindowHint);
这样图片的半透明就是窗口的半透明,全透明的地方好像就成了窗口穿透
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jonnystill7
只看该作者 3楼 发表于: 2011-01-09
引用第2楼roywillow于2011-01-09 21:35发表的  :
mask好像本身是个bitmap,要么透明要么不透明
用paintEvent把这个图绘制到窗体上可能就行了,但是需要
setAttribute(Qt::WA_TranslucentBackground, true);
setWindowFlags(Qt::FramelessWindowHint);
.......



nice!It works!
多谢!
离线jonnystill7
只看该作者 4楼 发表于: 2011-01-09
最终是这样实现的,问题解决!
  1. Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
  2. {
  3.     ui->setupUi(this);
  4.     setAttribute(Qt::WA_TranslucentBackground, true);
  5.     setWindowFlags(Qt::FramelessWindowHint);
  6. }
  7. void Widget::paintEvent(QPaintEvent *)
  8. {
  9.     QPixmap pixmapBg(":/img/bg.png");
  10.     QPainter painter(this);
  11.     painter.drawPixmap(0, 0, pixmapBg);
  12. }
离线carwin
只看该作者 5楼 发表于: 2011-03-02
win7下没有问题, xp下只有edit能显示出来. 其他半透明的东西无法显示.(忘记拷贝图片到虚拟机了)


实测完全能够实现, 用这个来模拟Aero效果, 应该能完全满足需求.
[ 此帖被carwin在2011-03-02 13:08重新编辑 ]
快速回复
限100 字节
 
上一个 下一个