Изменить размер окна Qml - PullRequest
       8

Изменить размер окна Qml

4 голосов
/ 26 января 2012

В моем проекте я создал прозрачное и безрамное QMainWindow, затем создал QmlApplicationViewer.Мне нужно иметь возможность перетаскивать и изменять размер окна.Как я могу это сделать?

1 Ответ

3 голосов
/ 27 января 2012

Это приложение представляет собой небольшой вариант представленного здесь для работы с прозрачными окнами в приложениях 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();
}

win.pro:

TEMPLATE += app
QT += gui declarative
SOURCES += win.cpp

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)
                }
            }
         }
     }
 }

Даже если вы не заинтересованы в прозрачности, это приложение показывает, как предоставить QMainWindow QML. Это позволяет приложению QML вносить изменения в главное окно.

Щелкните синий прямоугольник , чтобы перетащить окно вокруг , и щелкните красный прямоугольник , чтобы изменить размер окна , используя жестко закодированные значения в qml. Конечно, поскольку окно прозрачно, вы не получите визуальной обратной связи от обычного непрозрачного приложения при изменении его размера. Но операция изменения размера работает, хотя. Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...