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

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


person Dcow    schedule 26.01.2012    source источник
comment
Если вы создали БЕЗРАМНОЕ окно, я полагаю, вы не ожидаете, что будете перемещать его с помощью курсора мыши, верно? Поэтому я думаю, вы можете использовать resize().   -  person karlphillip    schedule 26.01.2012
comment
Мне следовало прояснить. Да, я создал безрамное окно, но только потому, что не хочу использовать стандартный дизайн.   -  person Dcow    schedule 27.01.2012
comment
Означает ли это, что вы хотите перемещать окно с помощью мыши или нет? Рассмотрите возможность добавления тега C ++.   -  person karlphillip    schedule 27.01.2012
comment
Да, перемещайте и изменяйте размер с помощью мыши.   -  person Dcow    schedule 27.01.2012


Ответы (1)


Это приложение представляет собой небольшую вариацию представленного здесь для работы с прозрачными окнами в приложениях 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. Конечно, поскольку окно прозрачное, у вас не будет визуальной обратной связи, как у обычного непрозрачного приложения, когда вы измените его размер. Но операция изменения размера работает. Наслаждаться!

person karlphillip    schedule 27.01.2012
comment
Надеюсь, вы сможете адаптировать этот код для использования QmlApplicationViewer вместо QDeclarativeView, если вам действительно нужно. - person karlphillip; 27.01.2012