Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt-查找';实际小部件';下方';视口';在坐标处_Qt_Widget_Coordinates_Viewport - Fatal编程技术网

Qt-查找';实际小部件';下方';视口';在坐标处

Qt-查找';实际小部件';下方';视口';在坐标处,qt,widget,coordinates,viewport,Qt,Widget,Coordinates,Viewport,我的Qt程序使用一个系统,在单击时检索小部件对象名,方法是查找MousePresseEvents的坐标,然后在这些坐标处查找子小部件(或窗口) 这适用于大多数小部件,但不适用于以下小部件 QScrollBox、QTableWidget、QGraphicsView、QTextEdit、QSpinBox 这些小部件(QSpinBox除外)返回“qt_scrollarea_viewport”而不是它们的objectName,可能是因为这是上面列出的小部件的子小部件 例如: 您有一个带有几何体(0,0,

我的Qt程序使用一个系统,在单击时检索小部件对象名,方法是查找MousePresseEvents的坐标,然后在这些坐标处查找子小部件(或窗口)

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

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

例如:
您有一个带有几何体(0,0,50,50)的QTextEdit。
显然,坐标(10,10)在这个小部件上。
但是,调用
parent.childAt((10,10))
不会返回QTextEdit。
调用
.objectName()
显示这是一个“qt\u滚动区域\u视口”

如果有二十个不同的QTextEdits和二十个不同的对象名称,它们仍然会返回“qt\u scrollarea\u viewport”

那么,如果我有小部件的坐标,我如何检索QTextEdit的实际对象名,而不是它的图形子小部件(我将“视口”解释为图形子部件)

谢谢


PyQt4
Python 2.7.2

Windows 7是一个小部件

解决方案:

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

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

因此,要获得第一级小部件,可以循环,直到
parent
是实际的父级:

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