2012-01-26 5 views
3

내 프로젝트에서 투명하고 프레임이없는 QMainWindow를 만든 다음 QmlApplicationViewer를 만들었습니다. 창을 끌어서 크기를 조정할 수 있어야합니다. 어떻게하면됩니까?크기 조정 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 

+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 다루는 여기에 제시된 하나의 작은 변화이다 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

정말 필요한 경우이 코드를'QDeclarativeView' 대신'QmlApplicationViewer'를 사용하도록 조정할 수 있다고 믿습니다. – karlphillip