4

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,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 に背景を描画しないように指示する方法はありますか?

4

1 に答える 1