我试图将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();
}
测试2.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