1

あるプロセスから別のプロセスのウィンドウに QWebview を埋め込もうとしています。含まれているウィンドウの背景が、含まれている webview を通して表示されるようにします。

test.cpp:

#define EMBEDDING 1

#include <QtCore>
#include <QtGui>
#include <QtWebKit>
#include <QX11EmbedWidget>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

#if EMBEDDING == 1

    QX11EmbedWidget *parent = new QX11EmbedWidget();

#else

    QWidget *parent = new QWidget();

#endif


    parent->show();

    QWebView *web = new QWebView(parent);

    parent->setAttribute(Qt::WA_TranslucentBackground);

    QWebPage *page = web->page();
    QPalette palette = page->palette();
    palette.setBrush(QPalette::Base, Qt::transparent);
    page->setPalette(palette);


#if EMBEDDING == 1

    parent->embedInto(atoi(argv[1]));

#endif

    page->currentFrame()->documentElement().setInnerXml("text");

    web->show();
    parent->show();

    return app.exec();
}

test2.cpp:

#include <QtCore>
#include <QtGui>
#include <iostream>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget *parent = new QWidget();

    parent->setStyleSheet("background-color: yellow;");

    parent->show();
    parent->move(100,100);


    std::cout << "Winid: " << parent->winId() << "\n";

    return app.exec();
}

次のコマンドを使用して、Ubuntu 12.04 x86_64 でこれらをビルドしました。

gcc test.cpp -I/usr/include/qt4/QtCore/  -I/usr/include/qt4/QtGui/ -I/usr/include/qt4/QtWebKit  -I/usr/include/qt4/ -lQtCore -lQtGui -lQtWebKit -o test.out
gcc test2.cpp -I/usr/include/qt4/QtCore/  -I/usr/include/qt4/QtGui/ -I/usr/include/qt4/QtWebKit  -I/usr/include/qt4/ -lQtCore -lQtGui -lQtWebKit -o test2.out

コードを実行するには、最初./test2.outにウィンドウIDを出力する必要があります。次に./test.out <winid>、test2.out出力からのウィンドウIDはどこですか

合成ウィンドウ マネージャーを実行していない場合は、xcompmgr を起動する必要がある場合があります。

私が望む結果を得る代わりに、他のアプリケーションの背景が透けて見えるはずの黒い四角が得られます....

埋め込み以外の状況で透過性が機能することを実証するには、EMBEDDING を 0 に設定します test.cpp

何か不足している場合、または回避策がある場合はお知らせください。

ありがとう

PS。私は C/C++ をよく知りません。この投稿のために、PySide の問題を移植しただけです。ただし、C/C++ の推奨事項を PySide に戻すことができるはずです。

4

0 に答える 0