如何在rootViewer中设置DropArea,在Windows中设置“Qt :: FramelessWindowHint”标志

时间:2016-09-24 08:07:22

标签: c++ qt qml

我是Qt的新手。我想开发一个无框架应用程序。但QML中的AreaDrop不适用于Windows中的无框架应用程序。 我的代码:

main.qml

import QtQuick 2.5

Item {
    visible: true
    width: 640
    height: 480

    Rectangle {
        anchors.fill: parent
        width: 640
        height: 480
        color: "green"

        DropArea {
            anchors.fill: parent
            width: 640
            height: 480
            onEntered: {
                console.log("drop enter")
            }

            onDropped: {
                console.log("droped");
            }
        }
    }
}

的main.cpp

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQuickView viewer;
    viewer.setSource(QUrl("qrc:/main.qml"));
    viewer.setFlags(Qt::FramelessWindowHint);
    viewer.setColor(QColor(Qt::transparent));
    viewer.show();
    return app.exec();
}

此代码在Ubuntu中运行良好。但在Windows中,文件丢弃是不可接受的。我无法找到解决此问题的解决方案。 那么,如何将文件拖到Windows中的无框架应用程序中。 谢谢!

1 个答案:

答案 0 :(得分:0)

您应该将QWindow::flags设置为一组窗口标志和(可选)一组提示,但不仅仅是提示。所以你必须改变

viewer.setFlags(Qt::FramelessWindowHint);

viewer.setFlags(Qt::Window | Qt::FramelessWindowHint);

但是既然你用QML构建了GUI,我建议你以某种方式做到这一点:

Window {
    flags: Qt.Window | Qt.FramelessWindowHint
    ...
}

顺便说一下,因为你使用锚定,所以要避免设置大小。