【问题标题】:Qml / Qt / C++ : QQuickView in a QWidget - Need Background TransparencyQml / Qt / C++ : QWidget 中的 QQuickView - 需要背景透明度
【发布时间】:2014-12-13 16:25:47
【问题描述】:

我试图让我的容器中带有 qquickview 透明,并且只显示 QML 文件中的元素而不显示背景。

有没有更好的方法来实现这个?这是相关代码,您可以看到我已将 QML 添加到其中,因此唯一的违规者是包含 QQuickView 的 QWidget

QML 将仅使用文本制作一个类似于 Apple 的“Cover Flow”的菜单。我只希望它生成的文本可见。

目前它具有纯白色背景。

QQuickView *view = new QQuickView();
QWidget *container = QWidget::createWindowContainer(view, this);
container->setObjectName("wrappingContainer");
container->setMinimumSize(1000, 240);
container->setMaximumSize(1000, 240);
container->setFocusPolicy(Qt::TabFocus);

//view->setSource(QUrl("qrc:/qml/wrappingMenu.qml"));
ui->testLayout->addWidget(container);

【问题讨论】:

    标签: c++ qt qml


    【解决方案1】:

    试试QQuickWidget

    #include <QtWidgets>
    #include <QQuickWidget>
    
    class Widget : public QWidget
    {
        Q_OBJECT
    public:
        Widget() {
            setStyleSheet("background-color: 'grey';");
            mQQuickWidget = new QQuickWidget(QUrl(QStringLiteral("main.qml")), this);
            mQQuickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
            mQQuickWidget->setAttribute(Qt::WA_AlwaysStackOnTop);
            mQQuickWidget->setClearColor(Qt::transparent);
            mQQuickWidget->resize(400, 400);
            mQQuickWidget->raise();
        }
    private:
        QQuickWidget *mQQuickWidget;
    };
    
    int main(int argc, char** argv)
    {
        QApplication app(argc, argv);
        Widget widget;
        widget.resize(400, 400);
        widget.show();
        return app.exec();
    }
    
    #include "main.moc"
    

    main.qml:

    import QtQuick 2.2
    
    Item {
        Text {
            text: "Qt Quick Text"
            font.pixelSize: 32
            anchors.centerIn: parent
        }
    }
    

    【讨论】:

      【解决方案2】:

      我怀疑对于嵌入在 QWidget 中的 QQuickView 是否可以这样做。但是你可以有一个透明的QQuickView,比如:

      QQuickView view;
      
      view.setSurfaceType(QSurface::OpenGLSurface);
      
      QSurfaceFormat format;
      format.setAlphaBufferSize(8);
      format.setRenderableType(QSurfaceFormat::OpenGL);
      
      view.setFormat(format);
      view.setColor(QColor(Qt::transparent));
      view.setClearBeforeRendering(true);
      
      view.setFlags(Qt::FramelessWindowHint);
      
      view.setSource(QStringLiteral("qrc:/qml/wrappingMenu.qml"));
      
      view.show();
      

      【讨论】:

      • 是的,但不幸的是我需要嵌入它。
      • 这适用于 Windows 7 上的透明 QQuickView,Qt 5.7 Quick 2.0
      【解决方案3】:

      你可以这样做:

      QQuickView view;
      view.setColor(Qt::transparent);
      view.setSource("main.qml");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 2014-09-28
        • 2014-06-12
        • 2012-07-26
        • 1970-01-01
        相关资源
        最近更新 更多