- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想做的是:
我有一个带 QGraphicsView 的小 GUI。在此图形 View 中,我加载了一张图片:
// m_picture is QPixmap
// image is QImage
// m_graphic is QGraphicsScene
// graphicsView is QGraphicsView
m_picture.convertFromImage(image);
m_graphic->addPixmap(m_picture);
ui->graphicsView->setScene(m_graphic);
这不会造成任何问题,而且我始终可以毫无问题地加载新图像。现在,除了只显示图片之外,我还想让用户能够在图片上绘制一个矩形(“聚焦”在特定区域)。实际上,用户只需在 GUI 上的四个文本框中输入坐标(x、y、宽度、高度)。提供坐标后,用户按下按钮,将显示以下坐标处的矩形。我用这段代码完成了这个:
void tesseract_gui::show_preview_rect()
{
int x,y,h,w;
x = ui->numBox_x->value();
y = ui->numBox_y->value();
h = ui->numBox_h->value();
w = ui->numBox_w->value();
if( rect_initialized )
{
m_graphic->removeItem(m_rect);
}
else
{
rect_initialized = true;
}
m_rect->setPen(QPen(Qt::red));
m_rect->setRect(x,y,h,w);
m_graphic->addItem(m_rect);
return;
}
删除调用是因为我总是只想显示一个矩形。正如我所提到的,这很好用。但是,如果用户现在加载另一张图片(在我的帖子顶部调用),当我尝试绘制一个新矩形时,程序会崩溃。我在调用
时出现段错误m_rect->setPen(QPen(Qt::red));
如果我打电话
m_graphic->removeItem(m_rect);
加载新图片后我得到
QGraphicsScene::removeItem: item 0x8c04080's scene (0x0) is different from this scene (0x8c0a8b0)
然后它在 setPen 处因相同的错误而崩溃。
我不明白的是,我没有改变场景。我只是给它添加另一张图片(或覆盖它)。那么有什么建议可以让我正确地做到这一点吗?
最好的问候
//编辑:
我试着每次都用这样的新矩形来做:
void tesseract_gui::show_preview_rect()
{
int x,y,h,w;
x = ui->numBox_x->value();
y = ui->numBox_y->value();
h = ui->numBox_h->value();
w = ui->numBox_w->value();
m_graphic->clear();
m_graphic->addRect(x,y,h,w);
return;
}
这里的问题是,通过 clear() 调用,它还会从我的 GraphicsView 中清除图片本身...所以没有解决方案
//编辑:
按照建议我去掉了这样的警告:
if( m_rect->scene() != 0 )
{
m_graphic->removeItem(m_rect);
}
m_rect->setPen(QPen(Qt::red));
m_rect->setRect(x,y,h,w);
m_graphic->addItem(m_rect);
我知道这不是最好的方法,但我也尝试过这种方法(对我不起作用):
我在构造函数中添加了项目:
m_graphic->addItem(m_rect);
然后
m_rect->setPen(QPen(Qt::red));
m_rect->setRect(x,y,h,w);
m_graphic->update();
我一如既往地得到“相同”的错误(程序在 m_rect->setPen() 处崩溃)所以当我已经将矩形添加到图形中时,问题似乎总是出现,然后更改了 m_graphic 的图像,然后对 m_rect 进行了任何操作。 (实际上我猜想 m_graphic 拥有 m_rect 的所有权,所以这会导致段错误......?)
最佳答案
消息 QGraphicsScene::removeItem: item 0x8c04080's scene (0x0) is different from this scene (0x8c0a8b0)
告诉你 m_rect
不在任何场景中叫它。它可能已从您的代码中的其他地方删除,或者您在类层次结构中有 2 个同名变量。
此外,您无需将其从场景中移除即可对其进行更改。只需在场景中更改它即可。它将在下一次绘制事件中使用新的颜色和几何形状重新绘制。
即使您真的想在更改它之前将其删除,也只需通过调用 QGraphicsItem::scene()
来检查它是否在场景中。不需要初始化检查变量。
关于c++ - 场景更改时的 QGraphicsRectItem 和 QGraphicsScene 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8668227/
我正在从 QGraphicsRectItem 创建对象并添加到 Qgraphicscene(scene)。我想获取对象 (qgraphicsrectitem) 的每个 movement(pos),以便
我实际上正在实现一个类,该类允许用户在按下鼠标时绘制任意数量的矩形。 这是处理这种情况的 QGraphicsScene 的代码: void ImageGraphicsSceneW::mousePres
我一辈子都弄不明白这个问题,但我已将其归结为一个自给自足的问题。 我想做的是围绕在 QGraphicsScene 中选择的项目绘制一个 QGraphicsRectItem。绘制矩形后,可以以将所有项目
我在 qgraphicsScene 上绘制了一个 qgraphicsRectItem。对于鼠标事件,它会在场景上移动、调整大小和重新定位,即选择项目、mousePress 和 mouseMove。我怎
我一直在尝试找到一种方法来用任何颜色填充 QGraphicsRectItem 的实例,比如说红色,但是我没有找到一个明确的方法来完成这个天真的任务,如果你能的话那就太好了提供一些提示、链接等。 非常感
我试图在将 QGraphicsRectItem 添加到场景后移动它。它会移动,但与鼠标指针有一定的偏移量。我认为它只是将鼠标指针位置添加到其原始位置。我不知道如何解决这个问题。 这是我的代码: cla
我试图在用户移动 QGraphicsRectItem 时获取它的子类的 boundingRect() 。但是,随着矩形在场景中移动,boundingRect() 返回的矩形始终返回边界矩形的原始值。下
我想要一个在线监控系统,可以判断形状当前的位置,但是我得到了非常奇怪的项目坐标,而且每次我创建新的并拖动它时它的尺寸都会增加 1。 初始位置( map 大小为 751 x 751,通过输出到 qDeb
我正在逐步完成一个使用 Qt 和 C++ 的初学者(非基于类的)项目。该项目的主要目标是学习设计模式。但是在我开始学习如何使用和实现不同的设计模式以改进代码之前,我必须先有一个没有任何设计模式的工作实
我正在尝试创建一个可调整大小的 QGraphicsRectItem,并可以选择不同的绘制样式。 如果我创建一个仅具有调整大小功能的简单矩形,那么它会按预期工作: class Rectangle(QtW
我有 QGraphicsView、QGraphicsScene 和 QGraphicsRectItem。QGraphicsScene 中的 QGraphicsRectItem 和 QGraphicsV
我编写了这段代码来将 bullet 旋转到 enemy: void Bullet::turnToFutureLocation(Enemy *enemy) { QLineF ln(mapToSc
我正在创建排序算法的可视化。我有一个 QGraphicsRectItems vector ,它们是在应用程序启动时生成的具有不同高度和相同宽度的列。它们被打乱,然后添加到 QGraphicsScene
如何在 Qt 中的 qgraphicsrectitem 中制作自动收报机我试着跟随 rect = new QGraphicsRectItem; text = new QGraphicsText
如果我越过像 QGraphicsRectItem 这样的矩形,我想更改光标。 我有一个继承自 QGraphicsView 的类,矩形显示在 QGraphicScene 中。 我使用 eventFilt
我想做的是: 我有一个带 QGraphicsView 的小 GUI。在此图形 View 中,我加载了一张图片: // m_picture is QPixmap // image is QImage /
我第一次尝试 PyQT,目的是最终创建一些数据的非常基本的图形表示。 我目前正在尝试将两个 QGraphicsTextItem 装在 QGraphicsRectItem 中,我对看到的结果有一些疑问。
我是一名优秀的程序员,十分优秀!