Qt - 在Coordinates的'viewport'下找到'Actual Widget'

时间:2012-01-27 05:00:46

标签: qt widget coordinates viewport

我的Qt程序使用一个系统,在点击时检索widget objectNames,找到mousePressEvents的坐标,然后在那些坐标处找到子窗口小部件(或窗口)。

这适用于大多数小部件,但不适用于以下小部件;
QScrollBox,QTableWidget,QGraphicsView,QTextEdit,QSpinBox。

这些小部件(QSpinBox除外)返回'qt_scrollarea_viewport'而不是它们的objectName,可能是因为它是上面列出的那些小部件。

例如:
你有一个带几何的QTextEdit(0,0,50,50) 显然坐标(10,10)在这个小部件上“。” 但是,调用parent.childAt( (10,10) )不会返回QTextEdit 调用.objectName()表示这是'qt_scrollarea_viewport'。

如果你有20个不同的QTextEdits,有20个不同的对象名,那么它们仍然会返回'qt_scrollarea_viewport'。

那么,我如何检索QTextEdit的实际objectName,而不是它的图形子窗口小部件(这是我将'视口'解释为),因为我有窗口小部件的坐标?

谢谢!


PyQt4中
Python 2.7.2
Windows 7

2 个答案:

答案 0 :(得分:1)

这是一个儿童小部件。

解决方案:

if widget.objectName() == 'qt_scrollarea_viewport':    
    actual_obj = widget.parent().objectName()

答案 1 :(得分:0)

可以有多个级别的小部件,在这种情况下,childAt将返回最里面的小部件。

因此,要获取第一级窗口小部件,您可以循环直到parent是实际父级:

widget = parent.childAt(x,y)
while parent != widget.parent():
    widget = widget.parent()
actual_obj = widget.objectName()