9

QtQuick2 でフレームレス ウィンドウをドラッグする方法を探しています。フォーラムのリンクでこのスレッドをフォローしましたが、エラーが発生します。

コードの主な違いは、私のコードがQtQuick2ApplicationViewer代わりに使用し、 「.pos」プロパティがないQmlApplicationViewerように見えることです。QtQuick2ApplicationViewer

これは私の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 でも可能ですか? 手伝ってくれてありがとう!

4

4 に答える 4

18

私のプロジェクトでは、次のことを行います。

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

于 2013-09-21T01:06:10.150 に答える
4

また、ウィンドウを画面の垂直端の上にドラッグしたときにウィンドウを最大化する 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-15T01:25:05.140 に答える