我有一个问题,使QQuickWidget背景透明。
我想把一个QQuickWidget放在QWidget下面。QQuickWidget使用一个源qml文件。当我使用QT4.8时,我使用了QDeclarativeView。从Qt4移植到Qt5,不再使用QDeclarativeView。因此,我使用的是QQuickWidget而不是QDeclarativeView,如下所示:
QWidget *mainWidget = new QWidget();
mainWidget->setStyleSheet("background-image: url(:/background.png);");
QQuickWidget *quick = new QQuickWidget(mainWidget);
quick->setAttribute(Qt::WA_TranslucentBackground, true);
quick->setAttribute(Qt::WA_AlwaysStackOnTop, true);
quick->setClearColor(Qt::transparent);
quick->setSource(QUrl("qrc:/image.qml"));
QWidget *topWidget = new QWidget(mainWidget);
topWidget->setStyleSheet("background-image: url(:/semitransparent.png);");如果我这样做了:
setAttribute(Qt::WA_AlwaysStackOnTop, true);然后,背景变得透明,但打破了涉及在同一个窗口中的QQuickWidget下面的其他小部件的堆叠顺序。
当QQuickWidget在QWidget下面时,我想使它透明。这个是可能的吗?如果没有,你有什么解决办法?
(1)这是mainWidget的背景图像:

(2)这是QQuickWidget的背景。qml文件使用以下图像:

(3)这是topWidget的背景图像:

(4)我想要的:

(5)当我将WA_AlwaysStackOnTop设置为false时,我得到了什么

(6)当我将WA_AlwaysStackOnTop设置为true时,我得到了什么

发布于 2017-01-18 08:27:59
这里的正式QT文档http://doc.qt.io/qt-5/qquickwidget.html说,打破堆叠顺序是可以预期的:
当绝对必要时,可以通过在Qt::WA_AlwaysStackOnTop上设置QQuickWidget属性来克服这个限制。但是,要注意,这打破了堆叠顺序。例如,在QQuickWidget上不可能有其他小部件,所以它应该只在需要QQuickWidget的情况下使用,而在这种情况下,需要在下面显示其他小部件。
还请参阅以下官方博客条目:http://blog.qt.io/blog/2014/07/02/qt-weekly-16-qquickwidget/
最近这篇博客文章是针对QT5.1中的一个新特性:http://www.ics.com/blog/combining-qt-widgets-and-qml-qwidgetcreatewindowcontainer
结论:您所看到的不是一个bug,而是一个已知的、公认的、公开的QT框架的限制。
我的建议是:不要试图用黑客来解决这个问题,而是重新设计你的UI方法。例如,也许你可以让topWidgetα-混合(半透明)。
编辑:例如,如下所示:

发布于 2019-07-19 11:31:24
这很旧但是..。
在许多情况下,在Qt应用程序中嵌入QML小部件是无用的,除非您可以在不破坏堆栈顺序的情况下使其透明。
我没有一个已实现的解决方案,因为我最终不需要这样做。但我正在解释我的方法,以防有人想试一试。
1)获取一个具有父背景的像素地图:
void QuickRoomWidget::showEvent(QShowEvent *event)
{
QPoint p1 = mapTo(parentWidget(), QPoint(0, 0));
QPixmap px = parent->grab(QRect(p1, size()));
}2)使用QQuickImageProvider在QML中传递图像:
https://doc.qt.io/qt-5/qquickimageprovider.html
https://doc.qt.io/qt-5/qtquick-imageprovider-example.html
3)让qml小部件的根项使用像素映射绘制背景。
当然,这样做的性能不会很好,因此取决于您需要在哪里使用,它可能不是一个选项。但就我而言,这不是问题。
如果有人尝试过,请让我知道它是否有效!
https://stackoverflow.com/questions/41696239
复制相似问题