1

我正在尝试将 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

4

0 回答 0