核心思想是:

在main中引入QMainWindow对象,将qml文件作为该对象的widget,并将该对象注册到qml中,然后再qml中通过识别鼠标的位移来更改这个mainwindow的pos属性。


实现:

#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();
}

   qml:

Item {          
         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)
                }
            } //mousearea
         } //rectangle
 }


转载:http://blog.csdn.net/sgnh123456/article/details/8055654