嵌入X11半透明窗口

时间:2013-10-14 20:53:43

标签: qt qt4 x11

我试图将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

0 个答案:

没有答案