關於QWidget::childAt


childAt返回的是顯示在當前QWidget的參數位置的最頂層的子widget。比如我有下面這樣的ui

然后重載右鍵菜單事件

void ChildAtCheck::contextMenuEvent(QContextMenuEvent * ev)
{
 QWidget* pItem = childAt(ev->pos());
 if(!pItem) return;
 
 qDebug()<<pItem->objectName()<<"   " << pItem->parent()->objectName();
}

在執行過程中,我在不同位置單擊右鍵得到了不同的結果:

"label"     "centralWidget"
"widget_2"     "centralWidget"
"widget"     "widget_2"
"pushButton_3"     "widget_2"
"pushButton"     "widget"
"pushButton_2"     "widget"

可見childat拿到的是參數對應位置的最頂層widget指針(也就是可見的widget),和qt助手里面的解釋相符

QWidget * QWidget::childAt(const QPoint & p) const

This is an overloaded function.

Returns the visible child widget at point p in the widget's own coordinate system

所以如果自己寫的MyWidget類作為子widget插入到界面中時,不能childAt獲取到指針后直接轉成MyWidget,而是通過控件層級關系拿到MyWidget對象指針再轉。

 


免責聲明!

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



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