项目原因,最近需要通过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()函数寻找。
谨此纪念。