在Qt5中是否仍然可以在X11根窗口上绘图,如果是这样,怎么样?据我所知,这在Qt4中通过改变现有(刚刚创建的)QWidget的WId来起作用:
class Foo : public QWidget;
Foo:Foo(WId id)
: QWidget()
{
if (id) {
create( id, false, true );
}
}
显然,尽管看起来只是对底层代码进行了微小的修改,但这已不再可能了。
使用
的制裁替代方法QWidget::fromWindowContainer(QWindow::fromWinId(QX11Info::appScreen()))
对我不起作用:我得到2个或多或少的标准窗口以及错误消息:
QXcbConnection: XCB error: 8 (BadMatch), sequence: 850, resource id: 37748756, major code: 7 (ReparentWindow), minor code: 0
QXcbConnection: XCB error: 8 (BadMatch), sequence: 962, resource id: 37748760, major code: 7 (ReparentWindow), minor code: 0
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
我自己并没有调用paintEngine,也没有在我的QWidget :: paintEvent()覆盖之外做任何绘画。
我看到类似的问题已经被问到但仍然没有答案,我希望这个问题取得更大的成功。
答案 0 :(得分:1)
appScreen返回屏幕编号,而不是窗口ID。它为第一个屏幕/监视器返回0,这恰好是默认告诉QWidget()创建一个新窗口。你需要QX11Info :: appRootWindow()函数。