Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Qml scaling problem
Qt 6.12 LTS is out! See what's new in the release blog

Qml scaling problem

Scheduled Pinned Locked Moved QML and Qt Quick
3 Posts 2 Posters 2.1k 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.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #1

    Hello friends,

    I have a grid where I place elements from a panel. I have zoom option implemented with item scale property. The problem is when I applied zoom scale -/+ 0.1 and I want to put an element from the panel on the grid, it's not placed where I point with the mouse. I'm blocked...

    Friends, does anyone have any idea how I coulf fix it?

    Thanks in advance,
    Karen

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mcosta
      wrote on last edited by
      #2

      Hi,

      could you post some slice of your code?

      Once your problem is solved don't forget to:

      • Mark the thread as SOLVED using the Topic Tool menu
      • Vote up the answer(s) that helped you to solve the issue

      You can embed images using (http://imgur.com/) or (http://postimage.org/)

      1 Reply Last reply
      0
      • ? Offline
        ? Offline
        A Former User
        wrote on last edited by
        #3

        Hi mcosta, here is a javascript file with the logic:

        @var itemComponent = null;
        var draggedItem = null;
        var startingMouse;
        var posnInWindow;
        var posnObject;

        function startDrag(mouse)
        {
        posnInWindow = hallItem.mapToItem(hallEditor, 0, 0);

        startingMouse = { x: mouse.x, y: mouse.y }
        
        loadComponent();
        

        }

        function addTable(object) {
        hallEditor.addTable(object)
        }

        function loadComponent() {
        if (itemComponent != null) {
        createItem();
        return;
        }

        itemComponent = Qt.createComponent(hallItem.componentFile);
        
        if (itemComponent.status === Component.Loading)
            component.statusChanged.connect(createItem);
        else
            createItem();
        

        }

        function createItem() {
        if (itemComponent.status === Component.Ready && draggedItem == null) {
        draggedItem = itemComponent.createObject(hallEditor, {"image": hallItem.image, "x": posnInWindow.x, "y": posnInWindow.y, "z": 1, "scale": hallscene.scale});
        } else if (itemComponent.status === Component.Error) {
        draggedItem = null;
        console.log("error creating component");
        console.log(itemComponent.errorString());
        }
        }

        function continueDrag(mouse)
        {
        if (draggedItem == null)
        return;

        draggedItem.x = mouse.x + posnInWindow.x - startingMouse.x;
        draggedItem.y = mouse.y + posnInWindow.y - startingMouse.y;
        
        var itemPosY = window.doubleToInt((draggedItem.y - hallscene.y) / 20);
        var itemPosX = window.doubleToInt((draggedItem.x - hallscene.x) / 20);
        
        var Object = { x: itemPosX * 20, y: itemPosY * 20, width: draggedItem.width, height: draggedItem.height, numId: draggedItem.numId, rotation: draggedItem.rotation}
        
        hallEditor.isCollisionTest(draggedItem, Object)
        

        }

        function endDrag(mouse)
        {
        if (draggedItem == null)
        return;

        if (draggedItem.x < hallEditorFon.x || draggedItem.y < hallEditorFon.y || draggedItem.x + draggedItem.width > hallEditorFon.width || draggedItem.y + draggedItem.height > hallEditorFon.height || draggedItem.collision) {
            draggedItem.destroy();
            draggedItem = null;
        } else {
            draggedItem.parent = hallscene
            draggedItem.scale = 1;
            draggedItem.numId = hallscene.numTable;
            hallscene.numTable++;
        
            var itemPosY = window.doubleToInt((draggedItem.y + -hallscene.y) / 20);
            var itemPosX = window.doubleToInt((draggedItem.x + -hallscene.x) / 20);
        
            draggedItem.y = itemPosY * 20;
            draggedItem.x = itemPosX * 20;
            draggedItem.created = true;
        

        // console.log("x", draggedItem.x, "y", draggedItem.y);

            hallEditor.push_back(draggedItem)
        
            draggedItem = null;
        }
        

        }
        @

        I used these qml properties:
        @ scale: 1;
        transformOrigin: Item.TopLeft@

        thanks in advance,
        Karen

        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
        • Unsolved