2012-01-26 30 views
3

私のプロジェクトでは、透明でフレームレスなQMainWindowを作成し、QmlApplicationViewerを作成しました。私はウィンドウをドラッグしてサイズ変更できる必要があります。 どうすればいいですか?Qizeウィンドウのサイズ変更

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に対処するために、ここで提示された1つの小さな変化であります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

関連する問題