2012-01-27 20 views
1

My Qtプログラムは、mousePressEventsの座標を見つけ、それらの座標で子ウィジェット(またはウィンドウ)を見つけることによってウィジェットobjectNamesを取得するシステムを使用します。Qt - 座標での 'ビューポート'の下の '実際のウィジェット'を見つける

これはほとんどのウィジェットでは完全に機能しますが、次のウィジェットでは機能しません。
QScrollBox、QTableWidget、QGraphicsView、QTextEdit、QSpinBox。

これらのウィジェット(QSpinBoxを除く)は、objectNameの代わりに 'qt_scrollarea_viewport'を返します。これはおそらく上記の子ウィジェットであるためです。

例:
ジオメトリ(0,0,50,50)のQTextEditがあります。
明らかに座標(10,10)はこのウィジェット上にあります。
しかし、parent.childAt((10,10))を呼び出すと、QTextEditが返されません。
.objectName()を呼び出すと、代わりに 'qt_scrollarea_viewport'が表示されます。

20種類のオブジェクト名を持つ20種類のQTextEditがある場合、それらはすべて「qt_scrollarea_viewport」を返します。

QTextEditの実際のobjectNameを取得するにはどうしたらいいですか?グラフィカルな子ウィジェット(これは私が 'viewport'と解釈するものです)ではなく、私はウィジェットの座標を持っていますか?

ありがとうございます!


PyQt4
のPython 2.7.2
のWindows 7

答えて

1

それは子ウィジェットです。

ソリューション:

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

ありウィジェットのいくつかのレベルとすることができ、その場合には、childAtは、最も内側のウィジェットを返します。

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

ので、最初のレベルのウィジェットを取得するには、parentまでのループは、実際の親であることができます

関連する問題