项目原因,最近需要通过QScrollArea寻找其中最后一个弹簧并且设置大小和策略,因为无法直接调用UI指针,所以只能用代码寻找。
直接上代码:
if (m_scrollArea){int iScrollWidth = m_labelSelectedTitle->width();m_scrollArea->setFixedWidth(iScrollWidth);//m_scrollArea->setFixedHeight(600);QWidget* pWidget = m_scrollArea->widget();QLayout* pLayout = pWidget->layout();QVBoxLayout* verticalLayout = dynamic_cast<QVBoxLayout*>(pLayout);int index = verticalLayout->count() - 1;QLayoutItem* pItem = verticalLayout->itemAt(index);QSpacerItem* pSpacer = dynamic_cast<QSpacerItem*>(pItem);m_tableMaterial->hide();if (pSpacer){pSpacer->changeSize(20, 320, QSizePolicy::Maximum, QSizePolicy::Maximum);//verticalLayout->removeItem(pSpacer);//verticalLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Maximum, QSizePolicy::Maximum));}m_scrollArea->setFixedHeight(600);pWidget->setFixedHeight(800);pWidget->setFixedSize(QSize(iScrollWidth, 900));m_scrollArea->setGeometry(m_scrollArea->geometry().left(), m_scrollArea->geometry().top(), iScrollWidth, 600);qDebug() << m_scrollArea->height();//m_scrollArea->setMinimumHeight(m_scrollArea->height());}
主要参考了QTDesigner生成的代码,反向寻找,经过测试,以上代码可以正确找到最后一个弹簧。
由于弹簧并非继承自QObject,所以无法使用m_scrollArea->findChild()函数寻找。
谨此纪念。