あるプロセスから別のプロセスのウィンドウに 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 に戻すことができるはずです。