2012-01-26 4 views
3

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

+0

Если вы создали окно FRAMELESS, я предполагаю, что вы не собираетесь его перемещать с помощью курсора мыши, правильно? Поэтому я думаю, вы можете использовать ['resize()'] (http://developer.qt.nokia.com/doc/qt-4.8/qwidget.html#size-prop). – karlphillip

+0

Мне следовало бы разъяснить. Да, я создал бескаркасное окно, но только потому, что не хочу использовать стандартный дизайн. – Dcow

+0

Означает ли это, что вы хотите переместить окно с помощью мыши или нет? Подумайте о добавлении тега C++. – karlphillip

ответ

3

Это приложение представляет собой небольшое изменение одного представленного здесь, чтобы иметь дело с transparent windows in QML applications:

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

+0

Я надеюсь, что вы сможете адаптировать этот код для использования 'QmlApplicationViewer' вместо' QDeclarativeView', если вам действительно нужно. – karlphillip