gpt4 book ai didi

qt - QGraphicsScene 中 QWidget 的图形错误

转载 作者:行者123 更新时间:2023-12-01 23:15:10 26 4
gpt4 key购买 nike

我试图让一个小部件在一个大的可滚动面板中自由事件。当我滚动 QGraphics View 时,子窗口小部件无法正确绘制 - 它的子矩形将变空,并且边框(圆形)不会与 Canvas 混合。我有:

QApplication qapp(argc, argv);
QGraphicsView view;
QGraphicsScene scene;

// a simple QWidget with a gridlayout and some child objects:
MyQWidget mywidget(NULL);

scene.addWidget(&mywidget);

view.setScene(&scene);
view.setSceneRect(0,0,1280,1280);
view.show();
view.resize(512,512);

qapp.exec();

如果我使用 QGraphicsProxyWidget 和 scene.addItem() 代替,我会得到相同的虚假渲染。

如果我将自定义小部件作为 QGraphicsView 的父级,它会正确渲染,但该小部件似乎不再是 QGraphicsScene 的一部分,因为它不再滚动并保持固定在父窗口上。

发生什么事了?

编辑:消隐问题的图像,用 QPushButton 替换 MyWidget:

滚动之前:
Before scrolling

向下并向右滚动一点:
Scrolling a little down and to the right.

第二次编辑:我有一个视网膜显示屏。这可能有关系吗? Qt 是否有针对 Retina 的特殊设置?

最佳答案

当您尝试将小部件添加到已有父级的场景时,您应该会收到错误消息:

QGraphicsProxyWidget::setWidget: cannot embed widget which is not a toplevel widget, and is not a child of an embedded widget

QGraphicsScene::addWidget()QGraphicsProxyWidget::setWidget 的包装器,文档说:

widget must be a top-level widget whose parent is 0.

要混合边框,您需要将小部件设置为透明:

mywidget.setAttribute(Qt::WA_TranslucentBackground, true);

关于qt - QGraphicsScene 中 QWidget 的图形错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29053857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com