首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtQuick2拖动无框窗口

QtQuick2拖动无框窗口
EN

Stack Overflow用户
提问于 2013-09-21 00:04:05
回答 4查看 9.8K关注 0票数 10

我正在寻找一种在QtQuick2中拖动无框窗口的方法。我在论坛链接上跟踪了这个帖子,但是它给了我一个错误。

代码的主要区别在于我的代码使用QtQuick2ApplicationViewer而不是QmlApplicationViewer,看起来QtQuick2ApplicationViewer没有“.pos”属性。

这是我的main.cpp

代码语言:javascript
复制
#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的一部分

代码语言:javascript
复制
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吗?谢谢你帮忙!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-21 01:06:10

在我的项目中:

代码语言:javascript
复制
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中。

票数 20
EN

Stack Overflow用户

发布于 2016-08-15 01:25:05

另外,为了类似于Windows在将窗口拖动到屏幕垂直边缘上方时最大化窗口的行为:

代码语言:javascript
复制
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
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2016-08-27 08:07:31

我是这样做的:

代码语言:javascript
复制
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下的位置移动窗口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18927534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档