Как вызвать сигнал, когда один виджет находится на некотором расстоянии / области от другого виджета?

python qt pyqt widget position

68 просмотра

1 ответ

Я хочу создать область вокруг виджета таким образом, чтобы, если какие-либо другие виджеты появлялись в этой области, виджет отправлял сигнал. Расчет расстояния между виджетом и любым другим виджетом может быть вариантом, но проблема в том, что может быть несколько виджетов, и это может быть утомительно. В частности, виджет является, QLabelи я использую QPointдля размещения виджетов. Есть ли эффективный способ решения проблемы?

Пожалуйста, обратитесь к рисунку

Автор: abd Источник Размещён: 08.11.2019 10:58

Ответы (1)


0 плюса

Решение

Кажется, что вы хотите Widget1испустить сигнал, когда любой другой виджет (например, Widget2) перемещается так, что он попадает в область интереса вокруг Widget1. Один из способов сделать это - переопределить функции - обработчики движущихся виджетов, moveEvent()чтобы уведомить Widget1об их новой позиции.

Этот обработчик вызывается после перемещения виджета и уже находится на новой позиции. Простейшей вещью может быть просто вставить собственный сигнал вверху, прежде чем вызывать родительскую реализацию обработчика. Что-то вроде:

MyWidget::moveEvent(QMoveEvent *ev) {
    emit widgetMoved(ev->pos()); // emit signal with this widget's new position
    QLabel::moveEvent(ev);
}

Это требует QLabelсоздания подклассов , объявления widgetMoved()сигнала и переопределения обработчика. Вы также можете отправить thisуказатель в сигнале, чтобы Widget1сразу узнать, какой виджет отправил событие. (Это не обязательно, так как вы можете получить указатель на отправляющий виджет с помощью QObject::sender(), но это может быть проще.)

Затем запишите слот Widget1, связанный с этим сигналом, который вычисляет расстояние между этим перемещенным виджетом и самим собой, и издает сигнал, если это расстояние меньше, чем любой размер ROI.

Автор: bnaecker Размещён: 21.08.2016 05:45
Вопросы из категории :
32x32