我正在寻找一种在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();
}这是我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)
}
}当我试图拖动窗口时,我会得到以下错误:
TypeError:无法读取未定义的属性“x”
有什么想法吗?甚至可以用QtQuick2吗?谢谢你帮忙!
发布于 2013-09-21 01:06:10
在我的项目中:
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;
}在MouseArea中。
发布于 2016-08-15 01:25:05
另外,为了类似于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
}
}
}发布于 2016-08-27 08:07:31
我是这样做的:
Window {
id: window
height: 400
width: 250
x: (Screen.width - width)/2 //<---start position of window
y: (Screen.height - height)/2 //<-┘
color: "transparent"
flags: Qt.MSWindowsFixedSizeDialogHint | Qt.FramelessWindowHint
MouseArea {
anchors.fill: parent
property point lastMousePos: Qt.point(0, 0)
onPressed: { lastMousePos = Qt.point(mouseX, mouseY); }
onMouseXChanged: window.x += (mouseX - lastMousePos.x)
onMouseYChanged: window.y += (mouseY - lastMousePos.y)
}
Item {
id: myFirstPage
anchors.fill: parent
anchors.topMargin: 50
//...
//This item can have some mouse area
}
}现在您可以使用拖动顶部50个像素或任何不在任何MouseArea下的位置移动窗口。
https://stackoverflow.com/questions/18927534
复制相似问题