c – 使用QtQuick 2.0的透明小部件
发布时间:2020-12-16 07:05:14 所属栏目:百科 来源:网络整理
导读:我试图用QtQuick 2.0创建一个透明窗口. 我可以像这样创建一个透明的小部件: class TransparentWidget : public QWidget{public: TransparentWidget(QWidget* parent) : QWidget(parent) { resize(QSize(500,500)); setAttribute(Qt::WA_TranslucentBackgrou
我试图用QtQuick 2.0创建一个透明窗口.
我可以像这样创建一个透明的小部件: class TransparentWidget : public QWidget { public: TransparentWidget(QWidget* parent) : QWidget(parent) { resize(QSize(500,500)); setAttribute(Qt::WA_TranslucentBackground); setWindowFlags(Qt::FramelessWindowHint); } void paintEvent(QPaintEvent * event) { QPainter painter; QBrush brush(Qt::cyan); painter.begin(this); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(brush); painter.drawRect(0,100,100); painter.end(); } }; 现在我想用QQuickView做同样的事情,首先我创建它: QQuickView view; view.setSource(QUrl::fromLocalFile("test.qml")); view.setResizeMode(QQuickView::SizeRootObjectToView); 这是我的“test.qml”文件: Rectangle { width: 300; height: 300; color: "transparent"; Rectangle { anchors.top: parent.top; anchors.left: parent.left; width: 50; height: 100; color: "lightsteelblue"; } Rectangle { anchors.bottom: parent.bottom; anchors.right: parent.right; width: 50; height: 100; color: "darkgrey"; } } 现在我想创建一个透明的小部件,我这样做: QWidget *p = QWidget::createWindowContainer(&view,NULL,Qt::FramelessWindowHint); p->setAttribute(Qt::WA_TranslucentBackground); p->show(); 我使用WA_TranseculentBackground和FramelessWindowHint创建一个小部件,就像我对前一个小部件的方式一样,但它不起作用. 比走得更深一点,用pix来看看QQuickView后面跟注,我看到这一行: 现在我的问题: 1 – 为什么Qt用白色调用IDirect3DDevice9 :: clear? 2-有没有办法告诉QQuickView或QmlEngine不要绘制任何背景? 解决方法
QtQuick2的透明度从Qt 5.2开始,至少对于Windows(Angle和OpenGL版本)都是如此:
创建一个视图: QQuickView view; view.setOpacity(0.9999); view.setColor( Qt::transparent ); view.setSource( QUrl::fromLocalFile( QLatin1String( "Main.qml" ) ) ); 除setOpacity和setColor之外,不需要额外的样式/属性/标志调用. Rectangle { color: "transparent" } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |