如何獲得 Qt窗口部件在主窗口中的位置--確定鼠標是否在某一控件上與在控件上的位置


用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM