• 5519阅读
  • 11回复

[提问]关于窗口圆角不够圆滑的问题 [复制链接]

上一主题 下一主题
离线phpqinsir
 
只看楼主 倒序阅读 楼主  发表于: 2012-11-30
我已经通过重写paintEvent事件将代码里面做了如下操作:
  1. // 生成一张位图
  2.     QBitmap objBitmap(size());
  3.     // QPainter用于在位图上绘画
  4.     QPainter painter(&objBitmap);
  5.     // 圆角平滑
  6.     painter.setRenderHints(QPainter::Antialiasing
  7.                            |QPainter::HighQualityAntialiasing
  8.                            |QPainter::SmoothPixmapTransform, true);
  9.     // 填充位图矩形框(用白色填充)
  10.     painter.fillRect(rect(), Qt::white);
  11.     painter.setBrush(QColor(0, 0, 0));
  12.     // 在位图上画圆角矩形(用黑色填充)
  13.     painter.drawRoundedRect(this->rect(), 5, 5);
  14.     // 使用setmask过滤即可,被圆角切除部分用白色填充
  15.     setMask(objBitmap);
但是,圆角是实现了,可是那个角它不是圆滑。我也已经设置了:Antialiasing属性。效果图如下:




我看到像QQ和360这样的软件,圆角很平常,而且还有一条细边框。他们是怎么实现的呢?求各位赐教!!!谢了。!
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
离线roywillow

只看该作者 1楼 发表于: 2012-11-30
尝试用更大一些的半径呢?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线phpqinsir
只看该作者 2楼 发表于: 2012-11-30
回 1楼(roywillow) 的帖子
更大的半径,那就没有意义了。那么大的半径,更不美观了。我试着1至10像素的半径,都那样。唉。
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
离线0354030w

只看该作者 3楼 发表于: 2012-11-30
用样式表试试呢?
离线roywillow

只看该作者 4楼 发表于: 2012-11-30
回 2楼(phpqinsir) 的帖子
之前没仔细看你的代码
你用的是bitmap做mask来实现圆角?
bitmap这东西不支持alpha通道吧,正如其名,他是个bit map……用它来做mask,任何一点只有有和无的区别,而没有在两者之间的过渡,所以圆角处就没有任何过渡了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 5楼 发表于: 2012-11-30
参考一下Qt::WA_TranslucentBackground,然后直接在paintEvent中绘制带alpha通道的图片就好了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线phpqinsir
只看该作者 6楼 发表于: 2012-12-01
回 5楼(roywillow) 的帖子
唯有再试试你说的这种方式。非常感谢你的回复。试了之后再来结贴。
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
离线phpqinsir
只看该作者 7楼 发表于: 2012-12-01
回 3楼(0354030w) 的帖子
样式表试过,依然如此。
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
离线ffii4455

只看该作者 8楼 发表于: 2012-12-01
貌似本来就是这样的。。。你看看qq登陆的那个圆角。也没觉得不美观啊。本来就半径太小
离线phpqinsir
只看该作者 9楼 发表于: 2012-12-03
感谢上面几位朋友回答,我还是没有找到更好的圆角解决方案。CSS是行不能的。
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
离线shiziyang

只看该作者 10楼 发表于: 2012-12-03
用画圆角的方法出来的东西就是这个效果的(包括设置qss和setMask(QRegion)),你需要用photoshop之类的软件做一张带透明色的背景图(各种柔滑和渲染效果都做在图里),然后使用该图来setMask和drawPixmap

离线phpqinsir
只看该作者 11楼 发表于: 2012-12-03
回 10楼(shiziyang) 的帖子
不是美工料子,真心纠结很。呵呵。我觉得你的这个方法可行,但是。对于纯程序员的我来说,难度太大。有机会让我的美工同事帮忙做一张。
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
快速回复
限100 字节
 
上一个 下一个