• 6296阅读
  • 6回复

请教canvas如何来显示图片? [复制链接]

上一主题 下一主题
离线bestfox
 
只看楼主 倒序阅读 楼主  发表于: 2008-04-17
— 本帖被 XChinux 执行加亮操作(2008-04-19) —
请教大侠,如何用canvas类来进行显示图片
我通过鼠标事件可以来控制用canvaspolygon画出的矩形的任意位置,但是是否可以在这个矩形内加入图片呢?请大虾们指点一二.
离线xjcook

只看该作者 1楼 发表于: 2008-04-18
直接画就可以了,
重写你的矩形的paint函数,
直接使用传进来的QPainter* painter 画你需要的图片
painter->drawImage(rect(),_image);
离线bestfox
只看该作者 2楼 发表于: 2008-04-23
我的矩形是通过QCanvasRectangle类 直接画出的,能调用setBrush等,就是不能调用setPixmap,或是drawPixmap等。如果用painter来画,我怎么保证画在那个矩形里,而不是其他地方呢?
离线xjcook

只看该作者 3楼 发表于: 2008-04-25
QCanvasRectangle类的paint函数里面是有一个painter指针传给你的,
你重写的话可以直接用painter指针,你在paint函数里面可以取得你的QCanvasRectangle的矩形大小,
当然不会画到其他地方去了。
离线bestfox
只看该作者 4楼 发表于: 2008-04-25
首先多谢大侠多次指点小弟,在此深表感谢!
但由于本人愚笨,还是没有搞懂,还望继续指点!
我是通过这条语句 r = new QCanvasRectangle(100, 100, 50, 100, &canvas);  // 画出四方形的
QCanvasRectangle是QCanvasPolygonalItem的子类,因此通过调用父类的setBrush等函数可以很容易的在矩形中加入颜色,应此我想能否加入图片。
你说“QCanvasRectangle类的paint函数里面是有一个painter指针传给你的”我不明白是怎么回事,还望大侠细说?
离线xjcook

只看该作者 5楼 发表于: 2008-04-28
你可以继承于QCanvasRectangle自己写个类,就可以重载其paint函数了,
或者你可以直接new一个QGraphicsPixmapItem
离线jloveforever

只看该作者 6楼 发表于: 2015-11-14
loadImage加载图片问题
今天想用Canvas来绘制图片,但是使用了loadImage却显示失败了,却不知道是什么原因?求帮助
以下是我的代码:
import QtQuick 2.3
import QtGraphicalEffects 1.0
import QtQuick.Window 2.0
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
Rectangle {
    id:rect
    implicitWidth :480
    implicitHeight: 480
    radius:implicitHeight/2
    //    color:"blue"


    //        Image {
    //            id: background
    //            source: "qrc:/image/background.jpg"
    //            anchors.fill: rect
    //        }
   Canvas {
        width: 480
        height: 480
        opacity: 1
        clip: false
        contextType: qsTr("2d")
        anchors.left:rect.left
        anchors.top: rect.top
        anchors.bottom: rect.bottom
        //        property var  image:"qrc:/image/background.jpg"

        onPaint: {
            context.save()
            context.beginPath()
            context.lineWidth=2
            context.strokeStyle="blue"
            context.fillStyle=Qt.rgba(0.3,0.5,0.7,0.3)
            //            context.drawImage("qrc:/image/background.jpg",0,0)
            context.arc(180,150,0,Math.PI*2,true)
            context.closePath()
            context.clip()
            context.drawImage("qrc:/image/background.jpg",0,0)
            context.stroke()
            context.fill()
            context.restore()
        }
        Component.onCompleted:
            if(!isImageError("qrc:/image/background.jpg")){
                console.log("error")
            }
            else
                loadImage("qrc:/image/background.jpg")
        onImageLoaded: requestPaint()
    }
}
快速回复
限100 字节
 
上一个 下一个