用Qt Creator 設計程序時,最方便的就是ui設計器,可以很容易的得到想要的布局。
但是這樣自動布局帶來的后果是很難知道窗口中某一部件在主窗口中的相對位置。
在處理子窗口鼠標事件時變的很麻煩。主窗口有菜單、工具條等,想用鼠標繪圖,
把鼠標軌跡映射到窗口部件上,這些問題。
其實最主要的是獲得窗口部件的起始點相對主窗口的位置。
例如:在主窗口拖入一個QScrollArea 在其上放一個QLabel用來顯示鼠標事件。
可以在ui對象結構上看到如下結構。

大家知道,我們可以用pos()來獲得某一窗口部件的起始點相對其父的位置。
那么,看結構可知,要獲得scrollArea_2在主窗口(MainWindow)中的相對位置
即為:ui->scrollArea_2->pos()+ui->centralWidget->pos()
所以想獲得窗口ScrollArea_2在主窗口中的相對位置區域為:
labelrect = QRect(ui->scrollArea_2->pos()+ui->centralWidget->pos(),
ui->scrollArea_2->size());
那么判斷鼠標是否在此控件上只需在鼠標事件響應函數內寫如下語句即可:
if(labelrect.contains(event->pos())) {……}
現在你可以在任意復雜的ui結構中確定某一子部件的位置了,但一定要注意:
父關系,即當前部件於其父部件的相對位置,其父部件與上層部件的相對位置,
直到與主窗口的相對位置。
http://blog.csdn.net/yh_1988/article/details/6773451
