Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QML画布笔划,在少数零件上具有不同的线条厚度_Qt_Canvas_Qml_Stroke - Fatal编程技术网

Qt QML画布笔划,在少数零件上具有不同的线条厚度

Qt QML画布笔划,在少数零件上具有不同的线条厚度,qt,canvas,qml,stroke,Qt,Canvas,Qml,Stroke,我创建了以下QML项,它定义了自定义形状。我试着用相同的线厚得到那个形状,而很少有线段比其他线段大 Item { x: 100 y: 100 width: 400 height:400 Canvas { x: 10 y: 10 anchors.margins: 10 readonly property int widthMultiplier: 11 readonly p

我创建了以下QML项,它定义了自定义形状。我试着用相同的线厚得到那个形状,而很少有线段比其他线段大

    Item {
    x: 100
    y: 100
    width: 400
    height:400
    Canvas {
        x: 10
        y: 10
        anchors.margins: 10
        readonly property int widthMultiplier: 11
        readonly property int heightMultiplier: 9
        readonly property int baseValue: 30
        readonly property int topCornerFirstMultiplier: 3
        readonly property int topCornerSecondMultiplier: 3
        readonly property int bottomCornerFirstMultiplier: 8
        readonly property int bottomCornerSecondMultiplier: 6
        anchors.fill:parent


        onPaint: {
            var context = getContext("2d");

            context.beginPath();
            context.moveTo(0, baseValue*topCornerFirstMultiplier);
            context.lineTo(0, baseValue*heightMultiplier);
            context.lineTo(baseValue*bottomCornerFirstMultiplier, baseValue*heightMultiplier);
            context.lineTo(baseValue*widthMultiplier, baseValue*bottomCornerSecondMultiplier);
            context.lineTo(baseValue*widthMultiplier, 0);
            context.lineTo(baseValue*topCornerSecondMultiplier, 0);
            context.lineTo(0, baseValue*topCornerFirstMultiplier);


            context.lineWidth = 3
            context.strokeStyle = "black"
            context.stroke();
        }
    }
}
我得到的形状如下所示:

线条的宽度不同,因为它们是在画布区域之外绘制的(因此部分不可见)。例如,由绘制的垂直线

            context.moveTo(0, baseValue*topCornerFirstMultiplier);
            context.lineTo(0, baseValue*heightMultiplier);
仅在画布边缘绘制,因此画布的一半不可见。要解决此问题,可以手动添加一点填充。在您的例子中,我刚刚用5替换了0 x和y值,并且按照预期绘制了形状

            context.moveTo(5, baseValue*topCornerFirstMultiplier);
            context.lineTo(5, baseValue*heightMultiplier);
            context.lineTo(baseValue*bottomCornerFirstMultiplier, baseValue*heightMultiplier);
            context.lineTo(baseValue*widthMultiplier, baseValue*bottomCornerSecondMultiplier);
            context.lineTo(baseValue*widthMultiplier, );
            context.lineTo(baseValue*topCornerSecondMultiplier, 5);
            context.lineTo(5, baseValue*topCornerFirstMultiplier);

问题是什么?形状是否与您的期望不同,如果有,如何?或者您需要帮助的代码还有其他问题吗?问题是两行(左一行和上一行)的厚度不同。我能解决这个问题吗?