我的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
答案 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()