У меня есть бескаркасный QQuickWindow, и я хочу переместить его мышью, перетащив мышью. Прежде чем пытаться в моем большом применении, я создал простое тестовое приложение, чтобы попробовать то, что я нашел здесь, используя позицию курсора из класса C++, чтобы избежать проблем с QML: http://www.tickanswer.com/solved/5390888353/dragging-frameless-window-jiggles-in-qmlQML: Перемещение бескаркасного окна путем перетаскивания
Но мне не удалось с кодом ниже. Когда я нажимаю красный RECT и перемещаю мышь, мой желтый прямоугольник (корень RECT) перемещается, но только внутри исходного размера (в этом случае 500x500) ... Что я делаю неправильно?
Заранее спасибо
В моей main.cpp:
int main(int argc, char *argv[])
{
QtQuickControlsApplication a(argc, argv);
QQuickView* pView = new QQuickView();
CursorPosProvider mousePosProvider;
pView->rootContext()->setContextProperty("mousePosition", &mousePosProvider);
pView->setSource(QUrl("qrc:/Test.qml"));
pView->setFlags(Qt::FramelessWindowHint);
pView->show();
return a.exec();
}
Test.qml:
import QtQuick 2.0
Rectangle {
id: myWindow
width: 500; height: 500
color: "yellow"
Rectangle {
anchors.centerIn: parent
width: 200; height: 200
color: "red"
MouseArea {
id: titleBarMouseRegion
property var clickPos
anchors.fill: parent
onPressed: clickPos = { x: mousePosition.cursorPos().x, y: mousePosition.cursorPos().y }
onPositionChanged: {
myWindow.x = mousePosition.cursorPos().x - clickPos.x
myWindow.y = mousePosition.cursorPos().y - clickPos.y
}
}
}
}
cursorprovider.h:
#ifndef CURSORPOSPROVIDER_H
#define CURSORPOSPROVIDER_H
#include <QObject>
#include <QPointF>
#include <QCursor>
class CursorPosProvider : public QObject
{
Q_OBJECT
public:
explicit CursorPosProvider(QObject *parent = nullptr) : QObject(parent)
{
}
virtual ~CursorPosProvider() = default;
Q_INVOKABLE QPointF cursorPos()
{
return QCursor::pos();
}
};
#endif // CURSORPOSPROVIDER_H
Спасибо большое, но покачивания для меня... :( – Diego