Introduce QWindow::setFlag and QWidget::setWindowFlag
Analogous to QWidget::setAttribute(), introduce an API to easily enable/disable a single window flag without having to resort to w.setFlags(w.flags() | Qt::NewFlag). Change-Id: Ib0f7254a34c8d884cdec181c41b99e5ef035d954 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Sérgio Martins <sergio.martins@kdab.com>
This commit is contained in:
parent
a01f2112f4
commit
babc7c5929
@ -821,6 +821,8 @@ QSurfaceFormat QWindow::format() const
|
||||
|
||||
The actual window flags might differ from the flags set with setFlags()
|
||||
if the requested flags could not be fulfilled.
|
||||
|
||||
\sa setFlag()
|
||||
*/
|
||||
void QWindow::setFlags(Qt::WindowFlags flags)
|
||||
{
|
||||
@ -839,6 +841,23 @@ Qt::WindowFlags QWindow::flags() const
|
||||
return d->windowFlags;
|
||||
}
|
||||
|
||||
/*!
|
||||
\since 5.9
|
||||
|
||||
Sets the window flag \a flag on this window if \a on is true;
|
||||
otherwise clears the flag.
|
||||
|
||||
\sa setFlags(), flags(), type()
|
||||
*/
|
||||
void QWindow::setFlag(Qt::WindowType flag, bool on)
|
||||
{
|
||||
Q_D(QWindow);
|
||||
if (on)
|
||||
setFlags(d->windowFlags | flag);
|
||||
else
|
||||
setFlags(d->windowFlags & ~flag);
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the type of the window.
|
||||
|
||||
|
@ -163,6 +163,7 @@ public:
|
||||
|
||||
void setFlags(Qt::WindowFlags flags);
|
||||
Qt::WindowFlags flags() const;
|
||||
void setFlag(Qt::WindowType, bool on = true);
|
||||
Qt::WindowType type() const;
|
||||
|
||||
QString title() const;
|
||||
|
@ -10357,7 +10357,7 @@ void QWidget::updateGeometry()
|
||||
a window, causing the widget to be hidden. You must call show() to make
|
||||
the widget visible again..
|
||||
|
||||
\sa windowType(), {Window Flags Example}
|
||||
\sa windowType(), setWindowFlag(), {Window Flags Example}
|
||||
*/
|
||||
void QWidget::setWindowFlags(Qt::WindowFlags flags)
|
||||
{
|
||||
@ -10365,6 +10365,23 @@ void QWidget::setWindowFlags(Qt::WindowFlags flags)
|
||||
d->setWindowFlags(flags);
|
||||
}
|
||||
|
||||
/*!
|
||||
\since 5.9
|
||||
|
||||
Sets the window flag \a flag on this widget if \a on is true;
|
||||
otherwise clears the flag.
|
||||
|
||||
\sa setWindowFlags(), windowFlags(), windowType()
|
||||
*/
|
||||
void QWidget::setWindowFlag(Qt::WindowType flag, bool on)
|
||||
{
|
||||
Q_D(QWidget);
|
||||
if (on)
|
||||
d->setWindowFlags(data->window_flags | flag);
|
||||
else
|
||||
d->setWindowFlags(data->window_flags & ~flag);
|
||||
}
|
||||
|
||||
/*! \internal
|
||||
|
||||
Implemented in QWidgetPrivate so that QMdiSubWindowPrivate can reimplement it.
|
||||
|
@ -562,6 +562,7 @@ public:
|
||||
|
||||
void setWindowFlags(Qt::WindowFlags type);
|
||||
inline Qt::WindowFlags windowFlags() const;
|
||||
void setWindowFlag(Qt::WindowType, bool on = true);
|
||||
void overrideWindowFlags(Qt::WindowFlags type);
|
||||
|
||||
inline Qt::WindowType windowType() const;
|
||||
|
@ -102,6 +102,7 @@ private slots:
|
||||
void initTestCase();
|
||||
void stateChange_data();
|
||||
void stateChange();
|
||||
void flags();
|
||||
void cleanup();
|
||||
|
||||
private:
|
||||
@ -2194,6 +2195,18 @@ void tst_QWindow::requestUpdate()
|
||||
QTRY_COMPARE(window.received(QEvent::UpdateRequest), 2);
|
||||
}
|
||||
|
||||
void tst_QWindow::flags()
|
||||
{
|
||||
Window window;
|
||||
const auto baseFlags = window.flags();
|
||||
window.setFlags(window.flags() | Qt::FramelessWindowHint);
|
||||
QCOMPARE(window.flags(), baseFlags | Qt::FramelessWindowHint);
|
||||
window.setFlag(Qt::WindowStaysOnTopHint, true);
|
||||
QCOMPARE(window.flags(), baseFlags | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
||||
window.setFlag(Qt::FramelessWindowHint, false);
|
||||
QCOMPARE(window.flags(), baseFlags | Qt::WindowStaysOnTopHint);
|
||||
}
|
||||
|
||||
#include <tst_qwindow.moc>
|
||||
QTEST_MAIN(tst_QWindow)
|
||||
|
||||
|
@ -8957,8 +8957,13 @@ void tst_QWidget::taskQTBUG_4055_sendSyntheticEnterLeave()
|
||||
void tst_QWidget::windowFlags()
|
||||
{
|
||||
QWidget w;
|
||||
const auto baseFlags = w.windowFlags();
|
||||
w.setWindowFlags(w.windowFlags() | Qt::FramelessWindowHint);
|
||||
QVERIFY(w.windowFlags() & Qt::FramelessWindowHint);
|
||||
w.setWindowFlag(Qt::WindowStaysOnTopHint, true);
|
||||
QCOMPARE(w.windowFlags(), baseFlags | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
||||
w.setWindowFlag(Qt::FramelessWindowHint, false);
|
||||
QCOMPARE(w.windowFlags(), baseFlags | Qt::WindowStaysOnTopHint);
|
||||
}
|
||||
|
||||
void tst_QWidget::initialPosForDontShowOnScreenWidgets()
|
||||
|
Loading…
Reference in New Issue
Block a user