我正在寻找一种在QtQuick2中拖动无框窗口的方法.我在论坛链接上关注了这个帖子,但它给了我一个错误.
代码的主要区别在于我的代码使用QtQuick2ApplicationViewer
而不是QmlApplicationViewer
和它看起来QtQuick2ApplicationViewer
没有".pos"属性.
这是我的main.cpp
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QQmlContext>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
viewer.rootContext()->setContextProperty("QmlApplicationViewer", (QObject *)&viewer);
viewer.setFlags(Qt::FramelessWindowHint);
viewer.setMainQmlFile(QStringLiteral("qml/ubusell/main.qml"));
viewer.showExpanded();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
这是我的main.qml的一部分
MouseArea {
id: mouseRegion
anchors.fill: parent;
property variant clickPos: "1,1"
onPressed: {
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
print(QmlApplicationViewer.pos)
QmlApplicationViewer.pos = (20,20)
QmlApplicationViewer.pos = Qt.point(QmlApplicationViewer.pos.x+delta.x,
QmlApplicationViewer.pos.y+delta.y)
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试拖动窗口时,我收到此错误:
TypeError:无法读取未定义的属性"x"
有任何想法吗 ?甚至可以使用QtQuick2吗?感谢帮助!
Dco*_*cow 15
在我的项目中我做:
property variant clickPos: "1,1"
onPressed: {
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
rootWindow.x += delta.x;
rootWindow.y += delta.y;
}
Run Code Online (Sandbox Code Playgroud)
在MouseArea
.
还类似于将窗口拖动到屏幕垂直边缘上方时最大化窗口的 Windows 行为:
MouseArea {
anchors.fill: parent;
property variant clickPos: "1,1"
onPressed: {
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
var new_x = mainWindow.x + delta.x
var new_y = mainWindow.y + delta.y
if (new_y <= 0)
mainWindow.visibility = Window.Maximized
else
{
if (mainWindow.visibility === Window.Maximized)
mainWindow.visibility = Window.Windowed
mainWindow.x = new_x
mainWindow.y = new_y
}
}
}
Run Code Online (Sandbox Code Playgroud)