void tst_QScrollArea::ensureMicroFocusVisible_Task_167838() { QScrollArea scrollArea; scrollArea.resize(100, 100); scrollArea.show(); QWidget *parent = new QWidget; parent->setLayout(new QVBoxLayout); QWidget *child = new WidgetWithMicroFocus; parent->layout()->addWidget(child); parent->resize(300, 300); scrollArea.setWidget(parent); scrollArea.ensureWidgetVisible(child, 10, 10); QRect microFocus = child->inputMethodQuery(Qt::ImMicroFocus).toRect(); QPoint p = child->mapTo(scrollArea.viewport(), microFocus.topLeft()); microFocus.translate(p - microFocus.topLeft()); QVERIFY(scrollArea.viewport()->rect().contains(microFocus)); }
void RolloutBox::setExpanded(bool expanded) { if (m_expanded != expanded) { QScrollArea *sa = 0; QWidget *p = parentWidget(); while (p) { sa = qobject_cast<QScrollArea*>(p); if (sa) break; p = p->parentWidget(); } bool areUpdatesEnabled; if (sa) { areUpdatesEnabled = updatesEnabled(); sa->setUpdatesEnabled(false); } m_expanded = !m_expanded; QList<QWidget*> L = findChildren<QWidget*>(); for (int i = 0; i < L.size(); ++i) { if ((L[i] != m_toolButton) && (L[i] != m_checkBox)) L[i]->setVisible(m_expanded); } parentWidget()->updateGeometry(); if (sa) { qApp->processEvents(); if (m_expanded) sa->ensureWidgetVisible(this); sa->setUpdatesEnabled(true); } if (m_toolButton) { m_toolButton->setArrowType(m_expanded? Qt::DownArrow : Qt::RightArrow); } toggled(m_expanded); } }