Qt Windows 制作圆形头像

QT制作圆形头像类似于这样还蛮麻烦的,终于找到一个比较满意的方案,与大家一起分享。

1、在QML中。

qml代码如下,当然你要配上你的图。


import QtQuick 2.0
import QtQuick.Controls 1.1
import QtQuick.Window 2.0
import QtQuick.Controls.Styles 1.1
import QtGraphicalEffects 1.0

Item {
    id: mainRect
    //implicitWidth: 72
    //implicitHeight: 72
    width: 100
    height: 100

   <span style="color:#ff0000;"> property string source: "1.jpg"//初始化图片路径</span>
    property color color: "lightblue"
    property int radius: mainRect.width/2

    function setImage(image) 
    {
        if (image !== "")
            source = image
		else
			source = "/contents/default_100.png"
    }

    Rectangle {
        id: mask
        anchors.fill: img
        radius: mainRect.radius
        smooth: true
        border.width: 1; border.color: mainRect.color
        visible: false
    }

    Image {
        id: img
        anchors.fill: parent
        sourceSize: Qt.size(width,height)
        smooth: true
        source: mainRect.source
        asynchronous: true
        fillMode: Image.PreserveAspectCrop
        visible: false
    }

    OpacityMask {//使用mask
       <span style="color:#cc0000;"> id: threshold
        anchors.fill: img
        source: img
        maskSource: mask
        smooth: true
        transformOrigin: Item.Center//对应绘制图片中心</span>
    }
}


2、代码绘制。

//以下代码在QWidget中作用的
m_pEffect = new QGraphicsOpacityEffect(this);//这个类的具体文档请查相关文档,在这里就不在赘述了
pixmap = QPixmap(":/HeadIconWidget/Resources/skin/default/HeadIconWidget/40px.png");//加载掩码图像 
//改图为掩码图,记住你想显示哪,就让哪里透明,这就样拜托美工喽,或者你也可以自己搞了
QBrush mask(pixmap);//
m_pEffect->setOpacityMask(mask);
m_pEffect->setOpacity(1.0);//一定要注意设置透明度为不透明,这样才会效果更好哦,
setGraphicsEffect(m_pEffect);

<pre name="code" class="cpp">//重载paintEvent 绘制对应你想要的头像,当然你要自己控制绘制点,保证在中心位置,也要把图对应缩放至头像大小
 
 
void XXXX::paintEvent(QPaintEvent *)
{
<span style="white-space:pre">	</span>if (!m_image.isNull())
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>QPainter painter(this);
<span style="white-space:pre">		</span>painter.drawImage(m_drawPos, m_calcImage);//<span style="font-family: Arial, Helvetica, sans-serif;">m_calcImage 头像</span>

<span style="white-space:pre">	</span>}
}

当然还有别的方式,比如不规则窗口的方式,其他的方式暂时不太知晓了,如果你有很好的方法求教哦。
上述这几种方式其实都是大同小异,都是通过掩码图的方式进行的。
第一次博客,仅以纪念2015_11_02 偷笑


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值