【发布时间】:2019-02-28 14:38:50
【问题描述】:
我正在使用 Qt Creator 设计一个 Qt 应用程序。作为应用程序的一部分,我需要能够在hide() 之前获得QRubberBand 的位置、高度和宽度信息。为此,我尝试使用QRubberBand的文档中给出的以下逻辑:
void Widget::mousePressEvent(QMouseEvent *event)
{
origin = event->pos();
if (!rubberBand)
rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
rubberBand->setGeometry(QRect(origin, QSize()));
rubberBand->show();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
rubberBand->setGeometry(QRect(origin, event->pos()).normalized());
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
rubberBand->hide();
// determine selection, for example using QRect::intersects()
// and QRect::contains().
}
并在头文件的私有部分定义了rubberBand如下:
QRubberBand *rubberBand;
这样做后效果很好。为了进行下一步,我还定义了以下整数(标题的私有部分):
int rubX;
int rubY;
int rubWidth;
int rubHeight;
我尝试在将rubberBand 隐藏在mouseReleaseEvent 之前获取几何信息,类似于以下内容:
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
rubX = rubberBand->x();
rubY = rubberBand->y();
rubHeight = rubberBand->height();
rubWidth = rubberBand->width();
rubberBand->hide();
}
当我添加这些代码时,程序运行,但是当我尝试绘制 rubberBand 时,程序崩溃并给出 SIGSEGV。
所以这是我的问题:
- 为什么会这样?
- 是否可以通过稍微修改代码来实现我的目标?
- 我应该怎么做才能得到我想要的?
我知道我犯了一个愚蠢的错误,但我还没有发现。如果您想了解有关该问题的更多信息,请随时发表评论。
【问题讨论】:
-
您是否在
Widget构造函数中将rubberBand初始化为nullptr? -
@G.M.不,我还没做呢
-
@G.M.感谢您的帮助,我已经完成了,现在可以使用了。
标签: qt segmentation-fault