Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Canvas issue
Qt 6.11 is out! See what's new in the release blog

Canvas issue

Scheduled Pinned Locked Moved Solved QML and Qt Quick
15 Posts 2 Posters 5.5k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    peteritv
    wrote on last edited by
    #4

    Maybe I spoke before I knew what was really going on...

    It might help if you post the sceleton of your application, so we can see the context.

    T 1 Reply Last reply
    0
    • P peteritv

      Maybe I spoke before I knew what was really going on...

      It might help if you post the sceleton of your application, so we can see the context.

      T Offline
      T Offline
      Tikani
      wrote on last edited by Tikani
      #5

      @peteritv Here you can see entire main.qml:

      import QtQuick 2.7
      import QtQuick.Window 2.2
      import QtQuick.Controls 2.0
      
      Window {
          id: "window"
          visible: true
          width: 640
          height: 480
          maximumHeight: height
          maximumWidth: width
          minimumHeight: height
          minimumWidth: width
          color: "white"
          title: "Однослойный перцептрон"
      
          Component.onCompleted: {
              setX(Screen.width/2 - width/2)
              setY(Screen.height/2 - height/2)
              neuro.loadWeights()
          }
      
          property int xpos
          property int ypos
          property bool hold
          property bool clearCanvas:false
      
          Canvas {
              id:canvas
              anchors.top: parent.top
              width: 640
              height: 410
      
              onPaint: {
                  var ctx = getContext('2d')
                  if(clearCanvas) {
                      ctx.fillStyle = "white"
                      ctx.fillRect(0,0,width,height)
                      clearCanvas=false
                  }
                  else {
                      ctx.lineCap = "round"
                      ctx.lineWidth = 30
                      ctx.strokeStyle = 'blue'
                      ctx.beginPath()
                      ctx.moveTo(xpos,ypos)
                      xpos = area.mouseX
                      ypos = area.mouseY
                      ctx.lineTo(xpos, ypos)
                      ctx.stroke()
                  }
              }
      
              MouseArea {
                  id:area
                  anchors.fill: parent
                  acceptedButtons: Qt.LeftButton | Qt.RightButton
      
                  onPressed: {
                      if(mouse.buttons & Qt.LeftButton) {
                          hold=true
                          xpos = mouseX
                          ypos = mouseY
                      }
                  }
      
                  onPositionChanged: {
                      if(hold & (mouse.buttons & Qt.LeftButton)) {
                          canvas.requestPaint()
                      }
                  }
      
                  onReleased: {
                      hold = false
                  }
      
                  onClicked: {
                      infoArea.visible = false
                  }
              }
          }
      
              Button {
              id:recognize
              anchors.bottom: parent.bottom
              anchors.horizontalCenter: parent.horizontalCenter
              height: 50
              width: 300
              anchors.bottomMargin: 8
              text:"Распознать"
      
              onClicked: {
                  var image = canvas.getContext('2d').getImageData(0,0,canvas.width,canvas.height)
                  var norm_px = []
      
                  for(var i = 0, n=image.data.length; i<n; i+=4) {
                      if(image.data[i]===0 && image.data[i+1]===0 && image.data[i+2]===255 && image.data[i+3]===255) {
                          norm_px.push(1)
                      }
                      else
                      {
                          norm_px.push(0)
                      }
                  }
      
                  neuro.signal = norm_px
      
                  neuro.calculate()
      
                  if  (neuro.exitSignal===1) {
                      recognitionState.text="\u03F4"
                      recognitionState.color="green"
                  }
                  else if (neuro.exitSignal===2) {
                      recognitionState.text="\u03A8"
                      recognitionState.color="green"
                  }
                  else {
                      recognitionState.text="\u2205"
                      recognitionState.color="red"
                  }
      
                  infoArea.visible = true
                  exitInfo.text = "\u03F4: "+ neuro.exitTheta.toFixed(5) + " " + "\u03A8: " + neuro.exitPsi.toFixed(5);
      
                  canvas.requestPaint()
                  clearCanvas=true
              }
          }
      
              Rectangle {
                  visible: false
                  id: "infoArea"
                  anchors.horizontalCenter: canvas.horizontalCenter
                  anchors.verticalCenter: canvas.verticalCenter
                  width: 200
                  height: 200
                  color: "white"
                  border.color: "black"
                  border.width: 3
                  radius: 10
      
                  Text {
                      anchors.horizontalCenter: parent.horizontalCenter
                      anchors.verticalCenter: parent.verticalCenter
                      id:recognitionState
                      text:"\u03F4"
                      font.family: "Helvetica"
                      font.pointSize: 100
                      color: "green"
                  }
      
                  MouseArea {
      
                      id: "hoverArea"
                      anchors.fill: parent
                      hoverEnabled: true
      
                      ToolTip {
                          id:"exitInfo"
                          visible: hoverArea.containsMouse
                      }
                  }
            }
      }
      

      Only the color of mouse traces is defined correctly, unlike the background and it's strange.

      P.S. Sorry for my English, it is my second language, I will try to be more clear if you don't understand something in my posts.

      1 Reply Last reply
      0
      • P Offline
        P Offline
        peteritv
        wrote on last edited by
        #6

        After reading some docs, I am sure you are not telling something.

        You want to draw on something that is white, correct?
        So your canvas must be a child of something that is white.

        For instance:
        Rectangle { color: white; Canvas { ... } }

        Is that the case here?

        T 1 Reply Last reply
        0
        • P peteritv

          After reading some docs, I am sure you are not telling something.

          You want to draw on something that is white, correct?
          So your canvas must be a child of something that is white.

          For instance:
          Rectangle { color: white; Canvas { ... } }

          Is that the case here?

          T Offline
          T Offline
          Tikani
          wrote on last edited by
          #7

          @peteritv Yes, you are correct. In my case I set Canvas as a child of a white Window, but Context2D shows me, suddenly, that the canvas is the child of the black Window. Though it is displayed as white.

          1 Reply Last reply
          0
          • P Offline
            P Offline
            peteritv
            wrote on last edited by
            #8

            OK, I just run your example, and it seems to work.

            I have a white background on which I can draw.
            When I draw I see the traces of my mouse with a big "point" size.
            Draw color is blue.

            Everything seems to work.

            Now, since I don't have your "Neuro" file, THAT may be your problem...

            1 Reply Last reply
            0
            • P Offline
              P Offline
              peteritv
              wrote on last edited by
              #9

              We have a synchronisation issue here to :)

              So when you run your program, you are drawing on a black thing?

              1 Reply Last reply
              0
              • P Offline
                P Offline
                peteritv
                wrote on last edited by
                #10

                Where/How do you use Context2D?

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  peteritv
                  wrote on last edited by
                  #11

                  Ahhhh! I understand now! (I think)

                  You think that what ever background you choose, it will be part of your canvas?
                  That is NOT the case!

                  The canvas just is a container for some points being drawn!

                  For instance, you can take the canvas, and put it on something else like a red Rectangle.
                  It will still have the same points, but now on a red background.

                  In other words, the canvas does NOT hold any information at all about the background. It just knows about some pixels.

                  1 Reply Last reply
                  1
                  • P Offline
                    P Offline
                    peteritv
                    wrote on last edited by
                    #12

                    So in your case, you need to fill your Canvas with white pixels itself.

                    So with ur ctx functions, draw a white rectangle first, which will be the base of your canvas for drawing on.

                    1 Reply Last reply
                    1
                    • P Offline
                      P Offline
                      peteritv
                      wrote on last edited by
                      #13

                      So, instead of making your parent white:

                      Within your canvas, draw a white rectangle on start,
                      and then start drawing on that

                      1 Reply Last reply
                      1
                      • P Offline
                        P Offline
                        peteritv
                        wrote on last edited by
                        #14

                        But that explaines why you see "black" instead of "white" on your Context2D

                        I am assuming you are just interested in the points, and not the background, for further processing.
                        So forget about the canvas background, ok?

                        T 1 Reply Last reply
                        1
                        • P peteritv

                          But that explaines why you see "black" instead of "white" on your Context2D

                          I am assuming you are just interested in the points, and not the background, for further processing.
                          So forget about the canvas background, ok?

                          T Offline
                          T Offline
                          Tikani
                          wrote on last edited by Tikani
                          #15

                          @peteritv Huge thanks, I finnally got what's going on! A visible background of working application is just a result of visual compositing the Canvas with it's parent and these two does not share any properties between each other. Thanks a lot again, I think it is very important to know such nuances.

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved