- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 QGraphicsView
、QGraphicsScene
&& QGraphicsItemGroup
绘制带有可移动控制点的图。我遇到的问题是我找不到任何移除/删除该项目的方法。
我的想法如下:
我要有一个 QGraphicsView,在它上面将是可移动的插值点,在它下面将绘制通过这些点的图。
为了实现这一点,我正在考虑使用两个(或更多)QGraphicsItemGroups
。 - 一个用于插值点,不能删除,因为我需要拖动它们 - 一个用于显示在它们下方的实际情节
为此,我要将线条添加到第一组并显示它们。但是会有很多重绘,我现在不知道的是如何从 QGraphicsView
/QGraphicsScene
/QGraphicsItemGroup< 中正确删除项目
所以它不会再显示了。请记住,我只需要删除/替换一组项目而不删除所有其他项目。
我正在浏览文档和教程,但找不到任何有用的东西。
最佳答案
您需要先了解图形 View /场景系统。例如,您声明以下内容:-
"I'm going to have a QGraphicsView, on it are..."
这没有意义。 QGraphicsView 就像一个进入世界的窗口(QGraphicsScene)。因此,您将把派生自 QGraphicsItem 或 QGraphicsObject 的项目放入场景中。这些是通过 QGraphicsView 查看的。
添加一个item很简单,调用QGraphicsScene函数即可addItem ,它需要一个 QGraphicsItem*。
在这种情况下,您有一个指向该项目的指针,因此如果您调用 QGraphicsScene::removeItem ,它会将它从场景中移除,然后您可以删除该项目。如果删除发生在槽函数内部,我建议使用对 deleteLater 的调用,而不是直接删除指针。
您的问题提到了 QGraphicsItemGroups。如上,有函数QGraphicsScene::createItemGroup和 QGraphicsScene::destroyItemGroup .
正如 destroyItemGroup 的文档所述:-
Reparents all items in group to group's parent item, then removes group from the scene, and finally deletes it
因此,在这种情况下,调用 destroyItemGroup 只会销毁该组。因此,在调用 destroyItemGroup 之前,您需要先移除和删除项目。
请注意,如果您只是简单地删除场景中的某个项目,它会自动删除。
最后,请注意 Qt GraphicItems 使用 Qt 的父级层次结构,因此您可以简单地将对象作为父对象,而不是使用项目组。
关于c++ - 从 QGraphicsScene/QgraphicsItemGroup/QGraphicsView 中正确删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910240/
再会! 对于 Qt 4.7.3,下面的示例在 QGraphicsScene::~QGraphicsScene() 调用时崩溃: #include #include int main( int ar
我正在尝试将图像添加到 QGraphicsView/QGraphicsScene 以便稍后我可以根据用户的输入在其上绘制简单的几何图形。我需要确保图像适合 QGraphicsView 而不管其纵横比如
根据 Qt 规范 QGraphicsScene 是一个viewless QGraphicsItems 的数据模型。 我有一个可以在窗口和非窗口模式下使用的工具 (当为其提供命令行参数时)。 在非窗口模
我有一个 QGraphicsScene上面有图形和文字。当我尝试打印时,图形很好,但文本使用以磅为单位定义的字体大小,因此 scene->render()当我通过它时 QPainter用 QPrint
他们想在按下和移动鼠标按钮时拖动这条贝塞尔曲线.. 我这样做了: void MainWindow::mouseMoveEvent(QMouseEvent *e) { qDebug()buttons()
使用下面的代码片段,我创建了一个包含 100.000 个矩形的场景。 表现不错; View 响应没有延迟。 QGraphicsScene * scene = new QGraphicsScene; f
我试图了解如何在 QGraphicsScene 中重新定义选择和转换项目(一旦选择)的方式。 .例如改变一条线的长度,移动一条线,通过移动一个点来改变一个多边形。 我创建了一个 QGraphicsVi
我正在使用 QGraphicsScene 类。如何检测鼠标离开 QGraphicsScene ?是否有任何内部函数可以实现此目的? 最佳答案 如果您想检测释放事件,您必须覆盖 mouseRelease
我有一个小部件,它分为两个子小部件。一个显示图片,另一个提供编辑图片的选项。图片子部件的水平空间应是编辑子部件的 5 倍。我在网格布局中指定此约束。但是,一旦我将 QGraphicsScene(和 V
我创建了一个小应用程序,我试图使其在调整主窗口大小(GraphicsView 和场景也是如此)时整个场景(像素图和矩形)垂直缩放以完全适合内部图形 View 。我不想要垂直滚动条,也不希望它水平缩放。
我有一个 QGraphicsScene,我已经确定了我的中心点在哪里,但我现在需要弄清楚如何根据该信息将我的项目放置在场景中。 我有 2 条数据需要处理:距离和方位。 Range 显然是距离中心点(或
我想在我的主窗口中跟踪鼠标。我在 QGraphicsView 中启用了 moustracking这是 GraphicsView 子类的构造函数,其余是默认行为。 GraphicsView::Graph
我有一个非常简单的 QGraphicsScene 派生类: class SceneComponent : public QGraphicsScene { Q_OBJECT public:
我正在尝试使用 qgraphicsview qgraphicsitem 来创建像国际象棋一样的场景。 我正在按照官方示例尝试创建它,但没有显示任何内容。代码几乎是一样的。首先,我想知道是我的 Cell
我正在尝试将 QgraphicsView(QColorDialog) 小部件添加到 Palette 对话框中,但是 QGraphicsScene 对应于 QColorDialog 小部件总是空白,如果
我有这样的程序:在我的小部件中,我有 qpushbuttons、qslider 和 qgraphicsview。我将 qgraphicsscene 放在 qgraphicsview 中。问题是,当我在
我正在创建一个显示 QGraphicsScene 的 QGraphicsView。 我将场景的背景设置为 QImage 位图,其中: scene()->setBackgroundBrush(myQIm
我有一个从某个位置向上移动的椭圆。 void Equalizer::advance(int phase) { if(!phase) return; QPointF location =
我的目标: 我想在 QGraphicsView 上的位置 x = 0,y = 0 处绘制一个长度和宽度为 100 的简单矩形。那应该看起来像这样 到目前为止我做了什么我在主页(MainWindow)的
我正在 Qt 5.1 中编写一个小型 CAD 应用程序,我正在尝试弄清楚如何使 QGraphicsScene 的坐标与真实世界的尺寸相对应。例如,我打算将坐标保持在其原始形式(值,单位),以便在从毫米
我是一名优秀的程序员,十分优秀!