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
![偷笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/titter.gif)