Я разрабатываю приложение Qt с использованием Qt Creator.Как часть приложения, я должен быть в состоянии получить информацию о положении, высоте и ширине QRubberBand
, прежде чем я hide()
его.Для этой цели я попытался использовать следующую логику, приведенную в документации 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
.
Итак, вот мои вопросы:
- Почему это происходит?
- Можно ли достичь моей цели, немного отредактировав код?
- Что мне делать, чтобы получить то, что я хочу?
Я знаю, что совершил глупую ошибку, но пока не нашел ее.Не стесняйтесь комментировать, если вы хотите получить больше информации по этому вопросу.