前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qml透明窗口实现

Qml透明窗口实现

作者头像
Qt君
发布2020-04-02 17:14:43
3.5K1
发布2020-04-02 17:14:43
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

❝介绍Qml的两种透明窗口的实现。❞

方式1

  通过QQmlApplicationEngine加载Qml界面文件。需要添加下列代码即可:

  • 在使用「QQmlApplicationEngine」前调用QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software)函数。
代码语言:javascript
复制
int main(int argc, char *argv[])
{
    ...
    QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    ...
}
  • Qml的Window需要添加设置color为透明色("#00000000"),flags设置为Qt.FramelessWindowHint
代码语言:javascript
复制
import QtQuick 2.0
import QtQuick.Window 2.2

Window {
    id: root
    visible: true
    width: 640
    height: 480
    title: qsTr("Qml透明窗口1")
    color: "#00000000"
    flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint
    ...
}

方式2

  通过QQuickView加载Qml界面文件。需要添加下列代码即可:

  • 在使用「QQuickView」前调用QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software)函数。
代码语言:javascript
复制
int main(int argc, char *argv[])
{
    ...
    QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);
    QQuickView view(QUrl("qrc:/main.qml"));
    view.setTitle(QString::fromLocal8Bit("Qml透明窗口2"));
    view.setFlag(Qt::FramelessWindowHint);
    view.setFlag(Qt::WindowStaysOnTopHint);
    view.setColor(QColor(Qt::transparent));
    view.show();
    ...
}

  Qml中只需要将Item使用为根项目即可。

代码语言:javascript
复制
import QtQuick 2.0

Item {
    id: root
    width: 640
    height: 480
}

一些解释

  • WindowStaysOnTopHint为窗口置顶标记。
  • QQmlApplicationEngine与QQuickView底层都是使用QQuickWindow类。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方式1
  • 方式2
  • 一些解释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档