关于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