我想在窗口小部件周围创建一个区域,这样如果任何其他窗口小部件进入该区域,窗口小部件就会发送一个信号。计算窗口小部件和每个其他窗口小部件之间的距离可能是一个选项,但问题是可能有几个窗口小部件,它可能是单调乏味的。具体来说,小部件是QLabel
,我使用QPoint
来放置小部件。有没有一种有效的方法来解决这个问题?
答案 0 :(得分: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大小,则发出信号。