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