调整 Qml 窗口的大小

Dco*_*cow 4 c++ qt qml

在我的项目中,我创建了一个透明且无框架的 QMainWindow,然后创建了 QmlApplicationViewer。我需要能够拖动和调整窗口大小。我能怎么做?

kar*_*lip 5

此应用程序是此处介绍的用于处理QML 应用程序中透明窗口的应用程序的一个小变体:

win.cpp:

#include <QApplication>
#include <QDeclarativeView>
#include <QMainWindow>
#include <QDeclarativeContext>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow window;

    QDeclarativeView* v = new QDeclarativeView;
    window.setCentralWidget(v);

    v->setSource(QUrl::fromLocalFile(("draw_rectangles.qml")));   

    // expose window object to QML
    v->rootContext()->setContextProperty("mainwindow",&window);

    window.setStyleSheet("background:transparent;");
    window.setAttribute(Qt::WA_TranslucentBackground);
    window.setWindowFlags(Qt::FramelessWindowHint);
    window.show();

    app.exec();
}
Run Code Online (Sandbox Code Playgroud)

win.pro:

TEMPLATE += app
QT += gui declarative
SOURCES += win.cpp
Run Code Online (Sandbox Code Playgroud)

draw_rectangles.qml:

import Qt 4.7

Item {
     Rectangle {
         opacity: 0.5
         color: "red"
         width: 100; height: 100

         MouseArea {
            anchors.fill: parent
            onPressed: {
                mainwindow.size.width = 200;
                mainwindow.size.height = 500;
            }
         }

         Rectangle {
             color: "blue"
             x: 50; y: 50; width: 100; height: 100

            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)
                    mainwindow.pos = Qt.point(mainwindow.pos.x+delta.x,
                                      mainwindow.pos.y+delta.y)
                }
            }
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

即使您对透明度不感兴趣,该应用程序也会展示如何QMainWindow向 QML公开。这允许 QML 应用程序在主窗口中进行更改。

单击蓝色矩形拖动窗口,然后单击红色矩形使用 qml 中的硬编码值调整窗口大小。当然,由于窗口是透明的,因此当您调整其大小时,您将不会获得常规不透明应用程序的视觉反馈。但是调整大小操作有效。享受!