diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp index ab3703abe4d..115af89de2c 100644 --- a/src/widgets/util/qcompleter.cpp +++ b/src/widgets/util/qcompleter.cpp @@ -921,7 +921,7 @@ void QCompleterPrivate::_q_autoResizePopup() void QCompleterPrivate::showPopup(const QRect& rect) { - const QRect screen = QWidgetPrivate::availableScreenGeometry(widget); + const QRect screen = widget->screen()->availableGeometry(); Qt::LayoutDirection dir = widget->layoutDirection(); QPoint pos; int rh, w; diff --git a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp index 51a75573a45..6e04568e2c4 100644 --- a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp +++ b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp @@ -145,6 +145,7 @@ private slots: void QTBUG_14292_filesystem(); void QTBUG_52028_tabAutoCompletes(); void QTBUG_51889_activatedSentTwice(); + void showPopupInGraphicsView(); private: void filter(bool assync = false); @@ -1828,5 +1829,36 @@ void tst_QCompleter::QTBUG_51889_activatedSentTwice() QTRY_COMPARE(activatedSpy.count(), 1); } +void tst_QCompleter::showPopupInGraphicsView() +{ + QGraphicsView view; + QGraphicsScene scene; + view.setScene(&scene); + + QLineEdit lineEdit; + lineEdit.setCompleter(new QCompleter({"alpha", "omega", "omicron", "zeta"})); + scene.addWidget(&lineEdit); + + view.move(view.screen()->availableGeometry().topLeft() + QPoint(10, 10)); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + + // show popup under line edit + QTest::keyClick(&lineEdit, Qt::Key_A); + QVERIFY(lineEdit.completer()->popup()); + QVERIFY(lineEdit.completer()->popup()->isVisible()); + QCOMPARE(lineEdit.completer()->popup()->geometry().x(), lineEdit.mapToGlobal(QPoint(0, 0)).x()); + QVERIFY(lineEdit.completer()->popup()->geometry().top() >= (lineEdit.mapToGlobal(QPoint(0, lineEdit.height() - 1)).y() - 1)); + + // move widget to the bottom of screen + lineEdit.clear(); + int y = view.screen()->availableGeometry().height() - lineEdit.geometry().y(); + view.move(view.geometry().x(), y); + + // show popup above line edit + QTest::keyClick(&lineEdit, Qt::Key_A); + QVERIFY(lineEdit.completer()->popup()->geometry().bottom() < lineEdit.mapToGlobal(QPoint(0, 0)).y()); +} + QTEST_MAIN(tst_QCompleter) #include "tst_qcompleter.moc"