围绕其中心旋转MapQuickItem中的图像

时间:2019-01-27 01:03:10

标签: qt qml

我正在使用MapQuickItem作为ImagesourceItem,以显示用户在QML Map上的位置。

MapQuickItem的文档指出:

  

设置的坐标将与坐标的左上角对齐   屏幕上显示时包含的项目。

     

anchorPoint属性提供了一种将   与项目的其他部分协调,而不仅仅是左上角   角落,通过设置像素数可以使项目偏移。

     

一种简单的思考方法是注意   项目本身上的anchorPoint是可以对齐的点   显示时带有给定的coordinate

因此,我将锚点设置为与图像的中心相匹配,如下所示:

anchorPoint.x: img.width/2
anchorPoint.y: img.height/2

这会将箭头的中心放在用户位置的上方。到目前为止一切顺利。

现在,我希望使用rotation属性将图像绕其中心旋转以显示用户的标题。

Item transformOrigin属性的文档指出:

  

九个变换原点可用,如下图所示。的   默认变换原点为Item.Center

     

Transform Origin

因此,我希望图像围绕其中心旋转,因为这是默认行为。

但是不幸的是,现实却大不相同。围绕图像的左上角进行旋转,将箭头从用户的位置移开,如下图所示:

Rotating MapQuickItem

  • 我对文档的解释是否错误?
  • 如何使图像围绕其中心旋转?

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

main.qml

import QtQuick 2.0
import QtQuick.Window 2.0
import QtLocation 5.6
import QtPositioning 5.6

Window {
    width: 512
    height: 512
    visible: true

    property variant loc: QtPositioning.coordinate(48.858222, 2.2945)

    Map {
        id: map
        anchors.fill: parent
        plugin: Plugin { name: "osm" }
        center: loc
        zoomLevel: 16

        MapQuickItem {
            id: arrow
            coordinate: loc

            anchorPoint.x: img.width/2
            anchorPoint.y: img.height/2

            sourceItem: Image {
                id: img
                NumberAnimation on rotation { from: 0; to: 360; duration: 2000; loops: Animation.Infinite; }
                source: "arrow.png"
            }
        }
    }
}

arrow.png https://pasteboard.co/HYgV7Nf.png

1 个答案:

答案 0 :(得分:2)

文档是正确的,问题是如何应用任务的顺序,您要做的是先旋转图像,然后您只需建立使用左上角作为参考点的MapQuickItem源,因此它将始终相对于topLeft旋转。

解决方案是旋转MapQuickItem而不是sourceItem:

import pandas as pd
import os
file_path = 'path/to/files/'
file_names = os.listdir(file_path)

dataframes = []

# Import DataFrames.
for file_name in file_names:
    dataframes.append(pd.read_csv(file_path + file_name, sep='|', index_col=0))

df_avg = sum(dataframes) / len(dataframes)