- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 QGraphicsItemGroup 聚合了几个子项,我只想显示组的一部分。(不是子项的数量,区域)。就像这里的图片一样。
我要显示显示区域。
为此,我尝试覆盖 QGraphicsItemGroup::boundingRect()。然而,什么也没有发生。我在 QT 文档中找到了这个,也许这就是为什么不起作用的原因。
QGraphicsItemGroup 的 boundingRect() 函数返回项目组中所有项目的边界矩形。
此外,我知道我可以更改 QGraphicsView 的大小以使其正常工作。但是我把View作为CentralWidget,因为我还需要在View中显示其他对象,我不能改变View的大小。
如何设置QGraphicItemGroup的显示范围?
最佳答案
要执行此任务,我们可以通过返回定义可见区域的 QPainterPath
来覆盖 shape()
,以便它传播到它的 child 我们启用标志 ItemClipsChildrenToShape
:
class GraphicsItemGroup: public QGraphicsItemGroup{
public:
GraphicsItemGroup(QGraphicsItem * parent = 0):QGraphicsItemGroup(parent){
setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
}
QPainterPath shape() const
{
if(mShape.isEmpty())
return QGraphicsItemGroup::shape();
return mShape;
}
void setShape(const QPainterPath &shape){
mShape = shape;
update();
}
private:
QPainterPath mShape;
};
例子:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.setLayout(new QVBoxLayout);
QGraphicsView view;
QPushButton button("click me");
w.layout()->addWidget(&view);
w.layout()->addWidget(&button);
view.setScene(new QGraphicsScene);
GraphicsItemGroup group;
view.scene()->addItem(&group);
auto ellipse = new QGraphicsEllipseItem(QRectF(0, 0, 100, 100));
ellipse->setBrush(Qt::red);
auto rect = new QGraphicsRectItem(QRect(150, 150, 100, 100));
rect->setBrush(Qt::blue);
group.addToGroup(ellipse);
group.addToGroup(rect);
QObject::connect(&button, &QPushButton::clicked, [&group](){
QPainterPath shape;
if(group.shape().boundingRect() == group.boundingRect()){
shape.addRect(0, 50, 250, 150);
}
group.setShape(shape);
});
w.show();
return a.exec();
}
输出:
完整的例子可以在下面的link中找到.
关于c++ - 如何设置 QGraphicsItemGroup 的显示范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47972795/
我的系统具有派生自 QGraphicsWidget 的类。我在 QGraphicsScene 的布局中管理派生类对象。现在我需要一个包含两个或更多 QGraphicsWidget 的复合项目,我还需要
在我的应用程序中,我想使用 QGraphicsItemGroup 将项目分组为一个项目。 我玩了一下,不确定是否使用它,因为当我想捕捉事件时,事件会合并在一起,但我想处理特定子事件的特定事件。 我怎样
我正在尝试从 QGraphicsItemGroup 中删除 QGraphicsItem。当调用 removeFromGroup 时,该项目被删除(当然)。但是,它在场景中不再可见。我必须调用 Scen
我有很多rectItem在一个 QVector list_rect_item; 我将它们分组在 QGraphicsItemGroup 中,使它们从我的场景中间旋转: for(int i=0 ; i
我有一个 QGraphicsItemGroup 聚合了几个子项,我只想显示组的一部分。(不是子项的数量,区域)。就像这里的图片一样。 我要显示显示区域。 为此,我尝试覆盖 QGraphicsItemG
我一直在尝试使用 QGraphicsItemGroup 来获取一组 QGraphicsItem* 的边界矩形。在我看来,当我将所有项目插入组中时,边界矩形已正确确定;但是如果我随后移动组中的项目,边界
在 Qt 4.7.1 中,我尝试使用 QGraphicsItemGroup 选择多个元素。目标是在选择一个元素时选择组中的所有元素。 如果我单独创建对象,我在构造函数中设置 ItemIsSelecta
下面的代码 QGraphicsEllipseItem *ellipse = addEllipse(x, y, 6, 6, series_pen); ellipse->translate(-ellips
我想要一个 python 应用程序,它显示一堆小肖像和下面的名字。像那样: 它们应该是可移动和可编辑的(通过双击文本)。 我正在使用 PyQt4,所以我发现,为 Canvas 使用 QGraphics
我正在尝试使用 QGraphicsView、QGraphicsScene && QGraphicsItemGroup 绘制带有可移动控制点的图。我遇到的问题是我找不到任何移除/删除该项目的方法。 我的
如果我有一个 QGraphicsItem,我想将其放入 QGraphicsItemGroup,在一个循环中......就像这样: for(int i =0; i addToGroup(ipi);
假设我想在一些 QGraphicsScene 中显示一个简单的家谱树。那里的每个人都有确切的名字和姓氏(没有显示其他任何内容)。 我想为那里的每个人建立一个 QGraphicsItemGroup由两个
这是我的第一篇文章。我最近开始将 QT 与 C++ 结合使用。印象深刻。我有一个似乎无法解决的问题。基本上,我试图将许多 QGraphicsItems 组织成两个 QGraphicsItemGroup
我是一名优秀的程序员,十分优秀!