问题标签 [qgraphicswidget]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
907 浏览

python - 如何在 QGraphicsView 中自动正确设置 rect?

我有几个不同的问题要解决,但我无法弄清楚。我之前没有使用过QGraphicsView等,但我创建了一个QGraphicsView我试图加载图像的,我试图使用一个QSpinBox动态控制图像每行使用多少列。例如,如果我有 16 张图像并且QSpinBox设置为 4“我默认拥有”,则应该有 4 行和 4 列图像。那部分我似乎工作正常,但代码不是很好。我想不出一种方法来控制有多少列和多少行图像,除非我在每次计数更改时都删除并重新加载它们。我最终清理了整个场景并重新加载了所有内容,因为我无法单独删除项目。

我现在遇到的主要问题是自动正确设置行和列的矩形。我试图让场景随着更改而调整大小,而不会留下一堆空白的滚动条。

这是加载图像时它在开始时的样子。

图片已加载

这是滚动QSpinBox一点后的样子。此时应该只有一个垂直滚动条,而不是带有一堆空白空间的水平滚动条。

不必要的滚动条

经过反复试验,我发现在我的代码中我可以像这样设置场景矩形self.scene.setSceneRect(QRectF(self.graphics_widget.rect())),它似乎可以完美地解决滚动条问题,但我只能在我以某种方式手动触发它时才能让它工作,对于这个例子是“设置矩形”按钮的作用。

这是一个例子。单击“设置矩形”按钮后,垂直滚动条被正确删除,水平滚动条是整行的确切宽度,因为它应该是。

正确的 rect

如果我尝试在所有内容加载后自动设置场景矩形,它会给我错误的宽度和高度,但由于某种原因,如果我使用按钮等手动设置它,它会正常工作。

我遇到的另一个小问题是让顶部的红色条延伸到比视口区域更远的地方。如果我在水平滚动条显示时尝试水平滚动,它看起来像这样,我希望它可以拉伸整个宽度。

丑陋的顶栏

不过这没什么大不了的,我相信我能解决这个问题。我主要关心的是让场景矩形自动设置,以便一切正常流动,而不会留下一堆空白的滚动条。
有没有人有什么建议?谢谢。

这是我的代码:

0 投票
1 回答
615 浏览

python - 如何在 QTest 中生成鼠标点击 QGraphicsWidget?

我想测试从面板按下按钮的功能。问题是按钮不是 QPushButtons,而是 QGraphicWidget 元素。

如何生成此按钮鼠标单击以测试其行为?

按钮不是简单的 QPushButtons,因为它们在鼠标悬停时具有特殊行为、动画等。这些按钮被添加到场景中,然后将场景添加到视图中,并将视图作为小部件添加到布局中。我可以看到可以使用以下方法单击视图:

但这并没有点击按钮。我也试过指定按钮的位置:

但由于某种原因,这是不受支持的论点

Button 类和 PanelWithButtons 类的代码 (panel_with_buttons.py):

测试.py:

作为输出,我收到鼠标点击第一个按钮(我可以看到'button1 clicked'),但我不知道如何生成点击第二个按钮。

0 投票
1 回答
640 浏览

qt - 在 QGraphicsView 上添加多个 QGraphicsScene

我正在创建一个用户需要使用 QGraphicsView 进行交互的 GUI。所以我现在正在做的是,我创建了 QGraphicsScene 并将其分配给 QGraphicsView。

绘图应该有两层:一层是静态的,一层是动态的。

静态层应该具有在启动时创建一次的对象,而动态层包含多个项目(可能是数百个)并且用户将与动态层对象进行交互。

目前我在同一个场景上绘制两个图层,这会由于绘制大量对象而产生一些滞后。

所以问题:有没有办法将两个或更多 QGraphicsScene 分配给 QGraphicsView ?

0 投票
1 回答
234 浏览

python - 在插入小部件时重新调整自定义 QGraphicsWIdget 的大小

我创建了一个自定义 QGraphicsWidget ,它能够在场景中调整小部件的大小。我还可以将预定义的小部件(例如按钮、标签等)添加到我的自定义小部件中。我现在有两个问题。label第一个是小部件在插入新的或小部件时不会更改大小(重新调整),LineEdit因此新插入的小部件不会超出自定义小部件边框。

当我尝试将 的 更改为 0 以外的值时遇到第二个问题setContentMarginsQGraphicsLayout例如QGraphicsLayout.setContentMargins(1, 1, 1, 20)会延迟小部件中的光标LineEdit

这是图像。

在此处输入图像描述

(拖动灰色三角形改变大小)

0 投票
0 回答
52 浏览

c++ - Qt Bug:QGraphicsWidget 不将负坐标视为客户区

我正在用 QGraphicsWidget 绘制正方形,中心应该是坐标 (0, 0)。为了实现这一点,我覆盖了 boundingRect()

我还在setCursor(Qt::CrossCursor)Constructor 中进行了设置,这样我就可以将鼠标悬停在 Widget 上并查看实际客户区的开始和结束位置。

我希望小部件从(-SIZE/2, -SIZE/2)到位于广场的中心(SIZE/2, SIZE/2)(0, 0)事实上,它实际上是正确显示的。但并非所有客户区都可用于拖动。 当在正坐标中单击时,只能拖动小部件: (0, 0)(SIZE/2, SIZE/2)。看看截图和paint()功能。

绿色区域是从 (-SIZE/2, -SIZE/2) 到 (SIZE/2, SIZE/2) 的完整客户区。 读取区域从 (0, 0) 到 (SIZE/2, SIZE/2)

鼠标在红场:光标更改为十字 --> 区域被视为客户区域。项目可以拖动。

在此处输入图像描述

鼠标在绿色方块中:光标未更改为十字 --> 区域不被视为客户区域。无法拖动项目。

我已经花了很多时间研究并尝试自己解决这个问题。我无法弄清楚,我现在相信这是一个错误 - 我是对的吗?

我正在使用 Qt 版本5.15.2+kde+r961-1

现在这是完整的最小工作示例

0 投票
0 回答
45 浏览

c++ - 如何更改已经存在的 QGraphicsProxyWidget 的背景颜色?

我已经用 QGraphicsProxyWidgets 形成了一个网格布局,它们是添加到场景中的 Qlabel 小部件。我想通过单击按钮来更新小部件的背景颜色。

如何访问 QLabel 以便更改背景颜色?我尝试使用调色板,但它导致程序崩溃。

0 投票
1 回答
56 浏览

c++ - 如何修复“无法使用'QGraphicsLayoutItem *'类型的右值初始化'QGraphicsProxyWidget *'类型的变量”?

我想解析QGraphicsGridLayout,但得到这个错误。问题是我能够添加QGraphicsProxyWidget为项目但无法检索它。我想知道如何QGraphicsLayoutItem*QGraphicsProxyWidget*这行mainwindow.cpp代码中将 a 转换为auto *currentWidget = static_cast<QGraphicsProxyWidget*>(layout->itemAt(row, col));。使用它时static_cast返回一个NULL指针,请帮忙。

主窗口.h:

主窗口.cpp:

0 投票
0 回答
49 浏览

python - 如何在 PyQt5 中调整 QGraphicsTextItem 的大小,包括其文本/内容?

我制作了一个 QGraphicsTextItem 并将纯文本设置为其内容。之后,我在 QGraphicsWidget 中设置了 QGraphicsTextItem。

我的问题是,是否可以QGraphicsTextItem像这张图片一样调整包括其文本/内容的大小:

这是我要求的调整大小的视频。

调整大小的视频

如果这是可能的,我怎样才能将它应用到QGraphicsTextItem

第一张图片是图像,QGraphicsTextItem但我不知道如何在视频中实现调整大小。

我尝试过的事情:

  • 我尝试使用setTextWidth()并将其设置为 0.5,但它不起作用。
  • 我也尝试使用adjustSize()QGraphicsTextItem 但它也不起作用。

重现问题的代码:

0 投票
1 回答
17 浏览

pyqt5 - 我想在 PyQt 中使用 QGraphicsScene 旋转一个小部件(QLineEdit 和 QPushButton)

我想在 pyqt5 中旋转一个小部件,我已经开发了这段代码,但它不起作用。角度不会更新,它会返回 False。有谁知道如何更新这个角度以使小部件旋转?如果有人可以提供帮助,谢谢。

我已经看到了一个如何使用 qslider 旋转小部件的示例,但我不知道如何使用 QLineEdit 和 QPushButton 来调整它。

0 投票
1 回答
16 浏览

qt - 如何从 QGraphicsScene 项目中获取 QWidget?

我已将 QTextEdit 添加到 QGraphicsScene。现在如何访问小部件的属性和方法?