32 #include <QMdiSubWindow>
35 #include <QApplication>
36 #include <QMainWindow>
38 #include <QPushButton>
40 #include <QStyleOption>
41 #include <QVBoxLayout>
43 #include <QDockWidget>
48 #include <QOpenGLContext>
50 #include <QStyleHints>
52 static const Qt::WindowFlags DefaultWindowFlags
59 static bool tabBetweenSubWindowsIn(
QMdiArea *mdiArea,
int tabCount = -1,
bool reverse =
false)
62 qWarning(
"Null pointer to mdi area");
67 const bool walkThrough = tabCount == -1;
73 qWarning(
"Failed to set active sub window");
76 tabCount = subWindows.
size();
95 QTest::keyPress(focusWidget,
key, modifiers);
96 for (
int i = 0;
i < tabCount; ++
i) {
108 qWarning().nospace() <<
"Rubber band of tab " <<
i <<
" has different geometry: "
109 << rubberBand->
geometry() <<
" (sub window: " << subWindow->
geometry() <<
").";
113 qApp->processEvents();
115 QTest::keyRelease(focusWidget,
key);
134 static int cascadedDeltaY(
const QMdiArea *area)
143 if (
style->inherits(
"QMacStyle"))
146 return qMax(titleBarHeight - (titleBarHeight -
fontMetrics.height()) / 2, 1)
162 switch (arrangement) {
166 const int n = subWindows.
count();
168 const int numRows = qMax((
n % numColumns) ? (
n / numColumns + 1) : (
n / numColumns), 1);
173 const int columnWidth = mdiArea->viewport()->width() / numColumns;
174 const int rowHeight = mdiArea->viewport()->height() / numRows;
175 QPoint subWindowPos(columnWidth / 2, rowHeight / 2);
176 for (
int i = 0;
i < numRows; ++
i) {
177 for (
int j = 0;
j < numColumns; ++
j) {
178 const int index = expectedIndices.
at(
i * numColumns +
j);
179 QWidget *actual = mdiArea->viewport()->childAt(subWindowPos);
181 if (actual != expected && !expected->
isAncestorOf(actual))
183 subWindowPos.
rx() += columnWidth;
185 subWindowPos.
rx() = columnWidth / 2;
186 subWindowPos.
ry() += rowHeight;
192 const int dy = cascadedDeltaY(mdiArea);
201 QPoint subWindowPos(20, 5);
202 foreach (
int expectedIndex, expectedIndices) {
205 if (mdiArea->viewport()->childAt(subWindowPos) != expected)
208 subWindowPos.
rx() += dx;
209 subWindowPos.
ry() += dy;
215 qApp->processEvents();
238 void subWindowActivated_data();
239 void subWindowActivated();
240 void subWindowActivated2();
241 void subWindowActivatedWithMinimize();
243 void changeWindowTitle();
244 void changeModified();
248 void minimumSizeHint();
250 void setActiveSubWindow();
251 void activeSubWindow();
252 void currentSubWindow();
253 void addAndRemoveWindows();
254 void addAndRemoveWindowsWithReparenting();
255 void removeSubWindow_2();
257 void activateNextAndPreviousWindow();
258 void subWindowList_data();
259 void subWindowList();
260 void setBackground();
262 void tileSubWindows();
263 void cascadeAndTileSubWindows();
264 void resizeMaximizedChildWindows_data();
265 void resizeMaximizedChildWindows();
266 void focusWidgetAfterAddSubWindow();
267 void dontMaximizeSubWindowOnActivation();
268 void delayedPlacement();
269 void iconGeometryInMenuBar();
271 void updateScrollBars();
272 void setActivationOrder_data();
273 void setActivationOrder();
274 void tabBetweenSubWindows();
276 void setTabsClosable();
277 void setTabsMovable();
279 void setTabPosition_data();
280 void setTabPosition();
281 void nativeSubWindows();
284 void qtbug92240_title_data();
285 void qtbug92240_title();
286 void tabbedview_activefirst();
287 void tabbedview_activesecond();
288 void tabbedview_activethird();
297 qRegisterMetaType<QMdiSubWindow *>();
308 activeWindow =
child;
311 void tst_QMdiArea::subWindowActivated_data()
314 QTest::addColumn<int>(
"count");
322 void tst_QMdiArea::subWindowActivated()
332 qApp->setActiveWindow(&mw);
343 qApp->processEvents();
355 qApp->processEvents();
364 qApp->processEvents();
372 qApp->processEvents();
394 qApp->processEvents();
406 qApp->sendPostedEvents();
414 qApp->processEvents();
430 qApp->processEvents();
439 #include <Security/AuthSession.h>
440 bool macHasAccessToWindowsServer()
443 SessionAttributeBits sessionInfo;
444 SessionGetInfo(callerSecuritySession, &
mySession, &sessionInfo);
445 return (sessionInfo & sessionHasGraphicAccess);
450 void tst_QMdiArea::subWindowActivated2()
453 QSKIP(
"Wayland: This fails. Figure out why.");
457 for (
int i = 0;
i < 5; ++
i)
461 mdiArea.activateWindow();
493 mdiArea.activateWindow();
500 if (
qGuiApp->styleHints()->showIsFullScreen())
501 QSKIP(
"Platform is auto maximizing, so no showMinimized()");
505 mdiArea.showMinimized();
506 #if defined (Q_OS_MAC)
507 if (!macHasAccessToWindowsServer())
508 QEXPECT_FAIL(
"",
"showMinimized doesn't really minimize if you don't have access to the server",
Abort);
511 QSKIP(
"QTBUG-25298: This test is unstable on Mac.");
514 QSKIP(
"QTBUG-25298: Unstable on some X11 window managers");
522 mdiArea.showNormal();
523 mdiArea.activateWindow();
530 void tst_QMdiArea::subWindowActivatedWithMinimize()
540 qApp->setActiveWindow(&mw);
549 QVERIFY( activeWindow == window1 );
551 QVERIFY( activeWindow == window2 );
554 qApp->processEvents();
555 QVERIFY( activeWindow == window1 );
558 qApp->processEvents();
565 void tst_QMdiArea::showWindows()
616 #if !defined(Q_OS_DARWIN)
623 void tst_QMdiArea::changeWindowTitle()
634 mw->menuBar()->setNativeMenuBar(
false);
649 #if !defined(Q_OS_DARWIN)
654 qApp->processEvents();
658 #if !defined(Q_OS_DARWIN)
667 qApp->processEvents();
675 qApp->processEvents();
676 #if !defined(Q_OS_DARWIN)
685 qApp->setActiveWindow(mw);
693 qApp->processEvents();
694 #if !defined(Q_OS_DARWIN)
702 qApp->processEvents();
703 #if defined(Q_OS_DARWIN)
714 qApp->processEvents();
715 #if !defined(Q_OS_DARWIN)
724 qApp->processEvents();
734 void tst_QMdiArea::changeModified()
743 mw->menuBar()->setNativeMenuBar(
false);
764 #if !defined(Q_OS_DARWIN)
774 #if !defined(Q_OS_DARWIN)
784 #if !defined(Q_OS_DARWIN)
803 void tst_QMdiArea::childSize()
813 child->setFixedSize(200, 200);
819 child->resize(150, 150);
825 void tst_QMdiArea::fixedSize()
830 ws->resize(500, 500);
834 for (
i = 0;
i < 4; ++
i) {
846 ws->cascadeSubWindows();
847 ws->resize(800, 800);
852 ws->resize(500, 500);
854 ws->tileSubWindows();
855 ws->resize(800, 800);
860 ws->resize(500, 500);
879 void tst_QMdiArea::minimumSizeHint()
885 qApp->processEvents();
886 QAbstractScrollArea dummyScrollArea;
888 expectedSize = expectedSize.expandedTo(dummyScrollArea.minimumSizeHint());
892 qApp->processEvents();
905 void tst_QMdiArea::sizeHint()
914 qApp->processEvents();
919 expectedSize =
QSize(desktopSize.
width() * 2/6, desktopSize.
height() * 2/6);
923 void tst_QMdiArea::setActiveSubWindow()
933 const int windowCount = 10;
935 for (
int i = 0;
i < windowCount; ++
i) {
937 qApp->processEvents();
946 for (
int i = 0;
i < windowCount; ++
i) {
950 qApp->processEvents();
966 workspace.setActiveSubWindow(&fakeWindow);
970 void tst_QMdiArea::activeSubWindow()
973 QSKIP(
"Wayland: This fails. Figure out why.");
999 qApp->sendEvent(subWindow, &deactivateEvent);
1004 qApp->sendEvent(subWindow, &activateEvent);
1009 dummyTopLevel.
show();
1012 qApp->setActiveWindow(&dummyTopLevel);
1024 void tst_QMdiArea::currentSubWindow()
1030 for (
int i = 0;
i < 5; ++
i)
1033 qApp->setActiveWindow(&mdiArea);
1043 dummyTopLevel.
show();
1048 qApp->setActiveWindow(&dummyTopLevel);
1061 qApp->setActiveWindow(&mdiArea);
1070 qApp->setActiveWindow(&dummyTopLevel);
1074 qApp->setActiveWindow(&mdiArea);
1085 qApp->sendEvent(active, &windowDeactivate);
1090 qApp->sendEvent(active, &windowActivate);
1095 void tst_QMdiArea::addAndRemoveWindows()
1107 qApp->processEvents();
1115 window->setMinimumSize(900, 900);
1118 qApp->processEvents();
1127 window->resize(1500, 1500);
1130 qApp->processEvents();
1146 qApp->processEvents();
1172 qApp->processEvents();
1207 void tst_QMdiArea::addAndRemoveWindowsWithReparenting()
1217 qApp->processEvents();
1237 static int numberOfConnectedSignals(
MySubWindow *subWindow)
1242 int numConnectedSignals = 0;
1243 for (
int i = 0;
i < subWindow->metaObject()->methodCount(); ++
i) {
1251 return numConnectedSignals;
1254 void tst_QMdiArea::removeSubWindow_2()
1258 QCOMPARE(numberOfConnectedSignals(subWindow), 0);
1262 QVERIFY(numberOfConnectedSignals(subWindow) >= 2);
1266 QCOMPARE(numberOfConnectedSignals(subWindow), 0);
1269 QVERIFY(numberOfConnectedSignals(subWindow) >= 2);
1272 QCOMPARE(numberOfConnectedSignals(subWindow), 0);
1275 void tst_QMdiArea::closeWindows()
1284 qApp->processEvents();
1291 qApp->processEvents();
1294 qApp->processEvents();
1297 const int windowCount = 10;
1300 for (
int i = 0;
i < windowCount; ++
i)
1302 qApp->processEvents();
1304 int activeSubWindowCount = 0;
1307 qApp->processEvents();
1308 ++activeSubWindowCount;
1310 QCOMPARE(activeSubWindowCount, windowCount);
1314 for (
int i = 0;
i < windowCount; ++
i)
1316 qApp->processEvents();
1321 qApp->processEvents();
1327 void tst_QMdiArea::activateNextAndPreviousWindow()
1333 const int windowCount = 10;
1335 for (
int i = 0;
i < windowCount; ++
i) {
1338 qApp->processEvents();
1345 for (
int i = 0;
i < windowCount; ++
i) {
1347 qApp->processEvents();
1357 for (
int i = windowCount - 2;
i >= 0; --
i) {
1359 qApp->processEvents();
1371 for (
int i = 0;
i < windowCount / 2; ++
i) {
1379 for (
int i = 0;
i < windowCount / 2; ++
i) {
1390 void tst_QMdiArea::subWindowList_data()
1392 QTest::addColumn<QMdiArea::WindowOrder>(
"windowOrder");
1393 QTest::addColumn<int>(
"windowCount");
1394 QTest::addColumn<int>(
"activeSubWindow");
1395 QTest::addColumn<int>(
"staysOnTop1");
1396 QTest::addColumn<int>(
"staysOnTop2");
1402 void tst_QMdiArea::subWindowList()
1405 QSKIP(
"Wayland: This fails. Figure out why.");
1408 QFETCH(
int, windowCount);
1409 QFETCH(
int, activeSubWindow);
1410 QFETCH(
int, staysOnTop1);
1411 QFETCH(
int, staysOnTop2);
1420 for (
int i = 0;
i < windowCount; ++
i) {
1436 activationOrder.
move(activationOrder.
indexOf(
windows[activeSubWindow]), windowCount - 1);
1442 for (
int i = 0;
i < windowCount; ++
i)
1452 QCOMPARE(subWindows, activationOrder);
1458 activationOrder.
move(activationOrder.
indexOf(
windows[staysOnTop2]), windowCount - 1);
1462 activationOrder.
move(activationOrder.
indexOf(
windows[activeSubWindow]), windowCount - 1);
1474 windows[activeSubWindow]->raise();
1475 windows[staysOnTop2]->lower();
1487 windows[staysOnTop2]->raise();
1499 activationOrder.
move(activationOrder.
indexOf(
windows[staysOnTop1]), windowCount - 1);
1511 void tst_QMdiArea::setBackground()
1519 void tst_QMdiArea::setViewport()
1522 QSKIP(
"Sometimes crashes in the CI, see QTBUG-58520");
1531 const int windowCount = 10;
1532 for (
int i = 0;
i < windowCount; ++
i) {
1544 qApp->processEvents();
1549 qApp->processEvents();
1554 QCOMPARE(windowsAfterViewportChange, windowsBeforeViewportChange);
1565 "use setViewport instead.");
1567 qApp->processEvents();
1573 void tst_QMdiArea::tileSubWindows()
1576 QSKIP(
"Wayland: This fails. Figure out why.");
1583 const int windowCount = 10;
1584 for (
int i = 0;
i < windowCount; ++
i) {
1594 for (
int i = 0;
i < windowCount; ++
i) {
1596 for (
int j = 0;
j < windowCount; ++
j) {
1604 for (
int i = 0;
i < 5; ++
i) {
1606 qApp->processEvents();
1619 qApp->processEvents();
1632 qApp->processEvents();
1648 qApp->processEvents();
1662 qApp->processEvents();
1698 workspace.setActiveSubWindow(activeSubWindow);
1707 qApp->processEvents();
1710 const QSize minSize(600, 130);
1735 const int spacing = 2 * frameWidth + 2;
1736 const QSize expectedViewportSize(3 * minSize.width() +
spacing, 3 * minSize.height() +
spacing);
1747 qApp->processEvents();
1767 qApp->processEvents();
1776 void tst_QMdiArea::cascadeAndTileSubWindows()
1783 const int windowCount = 10;
1785 for (
int i = 0;
i < windowCount; ++
i) {
1798 qApp->processEvents();
1800 qApp->processEvents();
1803 const int dy = cascadedDeltaY(&
workspace);
1822 void tst_QMdiArea::resizeMaximizedChildWindows_data()
1824 QTest::addColumn<int>(
"startSize");
1825 QTest::addColumn<int>(
"increment");
1826 QTest::addColumn<int>(
"windowCount");
1831 void tst_QMdiArea::resizeMaximizedChildWindows()
1835 QFETCH(
int, windowCount);
1848 for (
int i = 0;
i < windowCount; ++
i) {
1851 qApp->processEvents();
1861 qApp->processEvents();
1867 int newSize = startSize +
increment * windowCount;
1875 void tst_QMdiArea::focusWidgetAfterAddSubWindow()
1882 view->layout()->addWidget(lineEdit1);
1883 view->layout()->addWidget(lineEdit2);
1894 qApp->setActiveWindow(&mdiArea);
1898 void tst_QMdiArea::dontMaximizeSubWindowOnActivation()
1903 qApp->setActiveWindow(&mdiArea);
1911 for (
int i = 0;
i < 5; ++
i) {
1915 qApp->processEvents();
1920 for (
int i = 0;
i < subWindows.
count(); ++
i) {
1925 qApp->processEvents();
1931 for (
int i = 0;
i < subWindows.
count(); ++
i) {
1936 qApp->processEvents();
1945 for (
int i = 0;
i < subWindows.
count(); ++
i) {
1949 if (indexOfMaximized !=
i)
1951 qApp->processEvents();
1959 qApp->processEvents();
1967 for (
int i = 0;
i < subWindows.
count(); ++
i) {
1972 qApp->processEvents();
1977 for (
int i = 0;
i < subWindows.
count(); ++
i) {
1981 qApp->processEvents();
1993 void tst_QMdiArea::delayedPlacement()
2015 void tst_QMdiArea::iconGeometryInMenuBar()
2017 #if !defined (Q_OS_DARWIN)
2049 object->installEventFilter(
this);
2058 if (
event->type() == eventToSpy)
2068 void tst_QMdiArea::resizeTimer()
2071 QSKIP(
"Wayland: This fails. Figure out why.");
2081 QCOMPARE(timerEventSpy.count(), 0);
2085 QCOMPARE(timerEventSpy.count(), 1);
2086 timerEventSpy.clear();
2088 mdiArea.resize(mdiArea.size() +
QSize(2, 2));
2090 QCOMPARE(timerEventSpy.count(), 1);
2091 timerEventSpy.clear();
2095 QCOMPARE(timerEventSpy.count(), 0);
2098 void tst_QMdiArea::updateScrollBars()
2109 qApp->processEvents();
2111 QScrollBar *hbar = mdiArea.horizontalScrollBar();
2115 QScrollBar *vbar = mdiArea.verticalScrollBar();
2120 subWindow2->
move(10000, 10000);
2121 qApp->processEvents();
2125 for (
int i = 0;
i < 2; ++
i) {
2128 qApp->processEvents();
2134 mdiArea.resize(mdiArea.size() -
QSize(20, 20));
2136 qApp->processEvents();
2143 qApp->processEvents();
2155 void tst_QMdiArea::setActivationOrder_data()
2157 QTest::addColumn<QMdiArea::WindowOrder>(
"activationOrder");
2158 QTest::addColumn<int>(
"subWindowCount");
2159 QTest::addColumn<int>(
"staysOnTopIndex");
2160 QTest::addColumn<int>(
"firstActiveIndex");
2161 QTest::addColumn<QList<int> >(
"expectedActivationIndices");
2167 QTest::addColumn<QList<int> >(
"expectedCascadeIndices");
2175 QTest::addColumn<QList<int> >(
"expectedTileIndices");
2181 list << 2 << 1 << 0 << 1 << 2 << 3 << 4;
2182 list2 << 0 << 1 << 2 << 3 << 4;
2183 list3 << 4 << 3 << 2 << 4 << 1 << 0;
2187 list << 3 << 1 << 4 << 3 << 1 << 2 << 0;
2189 list2 << 0 << 2 << 4 << 1 << 3;
2191 list3 << 3 << 1 << 4 << 3 << 2 << 0;
2195 list << 0 << 1 << 0 << 1 << 4 << 3 << 2;
2197 list2 << 0 << 2 << 3 << 4 << 1;
2199 list3 << 1 << 4 << 3 << 1 << 2 << 0;
2203 void tst_QMdiArea::setActivationOrder()
2206 QFETCH(
int, subWindowCount);
2207 QFETCH(
int, staysOnTopIndex);
2208 QFETCH(
int, firstActiveIndex);
2222 for (
int i = 0;
i < subWindowCount; ++
i)
2229 for (
int i = 0;
i < subWindows.
count(); ++
i) {
2232 qApp->processEvents();
2237 staysOnTop->
raise();
2245 QVERIFY(verifyArrangement(&mdiArea,
Tiled, expectedTileIndices));
2251 QVERIFY(verifyArrangement(&mdiArea,
Cascaded, expectedCascadeIndices));
2263 for (
int i = 0;
i < subWindowCount; ++
i) {
2265 qApp->processEvents();
2266 if (
i == subWindowCount - 1) {
2275 QVERIFY(expectedActivationIndices.isEmpty());
2278 void tst_QMdiArea::tabBetweenSubWindows()
2282 for (
int i = 0;
i < 5; ++
i)
2288 qApp->setActiveWindow(&mdiArea);
2289 QWidget *focusWidget = subWindows.
back()->widget();
2299 QVERIFY(tabBetweenSubWindowsIn(&mdiArea));
2308 QVERIFY(tabBetweenSubWindowsIn(&mdiArea, -1,
true));
2313 QVERIFY(tabBetweenSubWindowsIn(&mdiArea, 3));
2322 QVERIFY(tabBetweenSubWindowsIn(&mdiArea, 1));
2327 void tst_QMdiArea::setViewMode()
2333 for (
int i = 0;
i < 5; ++
i) {
2354 tabBar = mdiArea.findChild<
QTabBar *>();
2363 for (
int i = 0;
i < subWindows.
size(); ++
i) {
2385 for (
int i = 0;
i < subWindows.
size(); ++
i) {
2395 activeSubWindow->
hide();
2397 activeSubWindow->
show();
2401 activeSubWindow->
hide();
2407 activeSubWindow->
show();
2413 if (subWindow != activeSubWindow) {
2424 tabBar = mdiArea.findChild<
QTabBar *>();
2429 void tst_QMdiArea::setTabsClosable()
2435 QCOMPARE(mdiArea.tabsClosable(),
false);
2440 mdiArea.setTabsClosable(
true);
2441 QCOMPARE(mdiArea.tabsClosable(),
true);
2445 tabBar = mdiArea.findChild<
QTabBar *>();
2452 mdiArea.setTabsClosable(
false);
2453 QCOMPARE(mdiArea.tabsClosable(),
false);
2457 void tst_QMdiArea::setTabsMovable()
2465 QCOMPARE(mdiArea.tabsMovable(),
false);
2470 mdiArea.setTabsMovable(
true);
2471 QCOMPARE(mdiArea.tabsMovable(),
true);
2475 tabBar = mdiArea.findChild<
QTabBar *>();
2483 subWindows << subWindow1 << subWindow2 << subWindow3;
2487 subWindows << subWindow1 << subWindow3 << subWindow2;
2491 subWindows << subWindow3 << subWindow2 << subWindow1;
2495 mdiArea.setTabsMovable(
false);
2496 QCOMPARE(mdiArea.tabsMovable(),
false);
2500 void tst_QMdiArea::setTabShape()
2526 void tst_QMdiArea::setTabPosition_data()
2528 QTest::addColumn<QTabWidget::TabPosition>(
"tabPosition");
2529 QTest::addColumn<bool>(
"hasLeftMargin");
2530 QTest::addColumn<bool>(
"hasTopMargin");
2531 QTest::addColumn<bool>(
"hasRightMargin");
2532 QTest::addColumn<bool>(
"hasBottomMargin");
2540 void tst_QMdiArea::setTabPosition()
2543 QFETCH(
bool, hasLeftMargin);
2544 QFETCH(
bool, hasTopMargin);
2545 QFETCH(
bool, hasRightMargin);
2546 QFETCH(
bool, hasBottomMargin);
2554 mdiArea.setContentsMargins(0, 0, 0, 0);
2564 mdiArea.setTabPosition(tabPosition);
2565 QCOMPARE(mdiArea.tabPosition(), tabPosition);
2571 for (
int i = 0;
i < 2; ++
i) {
2573 const QRect viewportGeometry = mdiArea.viewport()->geometry();
2574 const int left = viewportGeometry.
left();
2575 const int top = viewportGeometry.
y();
2576 const int right = mdiArea.width() - viewportGeometry.
width();
2577 const int bottom = mdiArea.height() - viewportGeometry.
height();
2585 if (hasTopMargin || hasBottomMargin)
2595 qApp->processEvents();
2598 qApp->setLayoutDirection(originalLayoutDirection);
2601 void tst_QMdiArea::nativeSubWindows()
2606 #if defined(Q_OS_WIN) && !defined(QT_NO_OPENGL)
2608 QSKIP(
"nativeSubWindows() does not work with ANGLE on Windows, QTBUG-28545.");
2618 QVERIFY(!mdiArea.viewport()->internalWinId());
2628 QVERIFY(mdiArea.viewport()->internalWinId());
2650 QVERIFY(mdiArea.viewport()->internalWinId());
2667 QVERIFY(mdiArea.viewport()->internalWinId());
2673 void tst_QMdiArea::task_209615()
2691 void tst_QMdiArea::task_236750()
2706 void tst_QMdiArea::qtbug92240_title_data()
2708 QTest::addColumn<bool>(
"dontMaximize");
2713 void tst_QMdiArea::qtbug92240_title()
2715 QFETCH(
bool, dontMaximize);
2718 QSKIP(
"Not supported on macOS");
2728 w.setCentralWidget(mdiArea);
2733 sw1->showMaximized();
2737 sw2->showMaximized();
2741 static void setupMdiAreaWithTabbedView(
QMdiArea &mdiArea)
2745 auto *mdiWin1 =
new QWidget(&mdiArea);
2749 auto *mdiWin2 =
new QWidget(&mdiArea);
2753 auto *mdiWin3 =
new QWidget(&mdiArea);
2758 void tst_QMdiArea::tabbedview_activefirst()
2761 setupMdiAreaWithTabbedView(mdiArea);
2770 void tst_QMdiArea::tabbedview_activesecond()
2773 setupMdiAreaWithTabbedView(mdiArea);
2782 void tst_QMdiArea::tabbedview_activethird()
2785 setupMdiAreaWithTabbedView(mdiArea);
2796 #include "tst_qmdiarea.moc"
small capitals from c petite p scientific i
[1]
EventSpy(QObject *object, QEvent::Type event)
bool eventFilter(QObject *object, QEvent *event) override
MyChild(QWidget *parent=nullptr)
QSize sizeHint() const override
int receivers(const char *signal) const
int value
the slider's current value
int minimum
the sliders's minimum value
static QWidgetList topLevelWidgets()
The QBrush class defines the fill pattern of shapes drawn by QPainter.
The QEvent class is the base class of all event classes. Event objects contain event parameters.
The QFontMetrics class provides font metrics information.
QScreen * primaryScreen
the primary (or default) screen of the application.
QString platformName
The name of the underlying platform plugin.
The QIcon class provides scalable icons in different modes and states.
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
virtual QSize minimumSize() const =0
virtual QSize sizeHint() const =0
The QLineEdit widget is a one-line text editor.
qsizetype size() const noexcept
bool isEmpty() const noexcept
const_reference at(qsizetype i) const noexcept
void move(qsizetype from, qsizetype to)
qsizetype count() const noexcept
void append(parameter_type t)
The QMainWindow class provides a main application window.\inmodule QtWidgets.
void setCentralWidget(QWidget *widget)
The QMdiArea widget provides an area in which MDI windows are displayed.
WindowOrder activationOrder
the ordering criteria for subwindow lists
void setActivationOrder(WindowOrder order)
QMdiSubWindow * addSubWindow(QWidget *widget, Qt::WindowFlags flags=Qt::WindowFlags())
void setViewMode(ViewMode mode)
void closeActiveSubWindow()
ViewMode viewMode
the way sub-windows are displayed in the QMdiArea.
void activateNextSubWindow()
QMdiSubWindow * activeSubWindow() const
void setOption(AreaOption option, bool on=true)
void activatePreviousSubWindow()
QMdiSubWindow * currentSubWindow() const
void removeSubWindow(QWidget *widget)
QList< QMdiSubWindow * > subWindowList(WindowOrder order=CreationOrder) const
@ DontMaximizeSubWindowOnActivation
void setActiveSubWindow(QMdiSubWindow *window)
The QMdiSubWindow class provides a subwindow class for QMdiArea.
QSize minimumSizeHint() const override
void setWidget(QWidget *widget)
The QObject class is the base class of all Qt objects.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
virtual bool eventFilter(QObject *watched, QEvent *event)
int receivers(const char *signal) const
static OpenGLModuleType openGLModuleType()
The QPixmap class is an off-screen image representation that can be used as a paint device.
The QPoint class defines a point in the plane using integer precision.
constexpr int & ry() noexcept
constexpr int & rx() noexcept
The QRect class defines a rectangle in the plane using integer precision.
constexpr int height() const noexcept
constexpr QPoint topLeft() const noexcept
constexpr int top() const noexcept
constexpr QPoint topRight() const noexcept
constexpr int left() const noexcept
constexpr int width() const noexcept
constexpr int y() const noexcept
constexpr int right() const noexcept
The QRegion class specifies a clip region for a painter.
QRegion subtracted(const QRegion &r) const
The QRubberBand class provides a rectangle or line that can indicate a selection or a boundary.
The QScopedPointer class stores a pointer to a dynamically allocated object, and deletes it upon dest...
QSize size
the pixel resolution of the screen
The QSize class defines the size of a two-dimensional object using integer point precision.
constexpr int height() const noexcept
constexpr int width() const noexcept
constexpr bool isValid() const noexcept
The QString class provides a Unicode character string.
static QString fromLatin1(QByteArrayView ba)
static QString number(int, int base=10)
The QStyle class is an abstract base class that encapsulates the look and feel of a GUI.
@ SH_ScrollView_FrameOnlyAroundContents
virtual int styleHint(StyleHint stylehint, const QStyleOption *opt=nullptr, const QWidget *widget=nullptr, QStyleHintReturn *returnData=nullptr) const =0
static QRect visualRect(Qt::LayoutDirection direction, const QRect &boundingRect, const QRect &logicalRect)
@ PM_MdiSubWindowMinimizedWidth
void initFrom(const QWidget *w)
the position of the selected tab in relation to this tab
The QTabBar class provides a tab bar, e.g. for use in tabbed dialogs.
int count
the number of tabs in the tab bar
int currentIndex
the index of the tab bar's visible tab
QSize sizeHint() const override
QString tabText(int index) const
QIcon tabIcon(int index) const
bool isTabEnabled(int index) const
Shape shape
the shape of the tabs in the tab bar
void moveTab(int from, int to)
bool tabsClosable
Whether or not a tab bar should place close buttons on each tab.
The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
The QVBoxLayout class lines up widgets vertically.
void activeChanged(QMdiSubWindow *child)
QSignalSpy spy(myCustomObject, SIGNAL(mySignal(int, QString, double)))
[0]
JDIMENSION DCTELEM * workspace
QList< QWindow * > windows
QHighDpiScaling::Point position(T, QHighDpiScaling::Point::Kind)
Q_TESTLIB_EXPORT QTestData & newRow(const char *dataTag)
Q_GUI_EXPORT bool qWaitForWindowActive(QWindow *window, int timeout=5000)
Q_GUI_EXPORT bool qWaitForWindowExposed(QWindow *window, int timeout=5000)
Q_TESTLIB_EXPORT void ignoreMessage(QtMsgType type, const char *message)
Q_CORE_EXPORT void qWait(int ms)
QTextStream & ws(QTextStream &stream)
QTextStream & fixed(QTextStream &stream)
@ WindowMinMaxButtonsHint
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QByteArrayView haystack, QByteArrayView needle) noexcept
MyMainWidget * mainWindow
MyMainWidget mySession(nullptr)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
QT_END_INCLUDE_NAMESPACE typedef double qreal
GLfloat GLfloat GLfloat w
[0]
GLdouble GLdouble GLdouble GLdouble top
GLenum GLenum GLsizei count
#define QStringLiteral(str)
#define QTEST_MAIN(TestObject)
#define QSKIP(statement,...)
#define QFETCH(Type, name)
#define QEXPECT_FAIL(dataIndex, comment, mode)
#define QTRY_COMPARE(expr, expected)
#define QVERIFY(statement)
#define QTRY_VERIFY(expr)
QtConcurrent::task([]{ qDebug("Hello, world!");}).spawn(FutureResult void increment(QPromise< int > &promise, int i)
[10]
QList< QWidget * > widgets
[11]
The QLatin1Char class provides an 8-bit ASCII/Latin-1 character.
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
void compare(Input input, FnUnderTest fn_under_test, const QByteArray &output)