我正在尝试将 QWebview 从一个进程嵌入到另一个进程的窗口中。我希望包含窗口的背景通过包含的 webview 显示。
测试.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