2012-01-26 92 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