Implement QSignalBlocker::dismiss()
...to set m_o to nullptr and prevent an existing QSignalBlocker from touching the QObject, which it was created for. Add documentation and implement an autotest. Change-Id: Ic18e80af5a57df1928f9d36aa0ab7ad79b6525fd Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
38380de63c
commit
a7d7634f1b
@ -762,6 +762,14 @@ QMetaCallEvent* QMetaCallEvent::create_impl(QtPrivate::SlotObjUniquePtr slotObj,
|
|||||||
every unblock() undoes any number of reblock() calls.
|
every unblock() undoes any number of reblock() calls.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn void QSignalBlocker::dismiss()
|
||||||
|
\since 6.7
|
||||||
|
Dismisses the QSignalBlocker. It will no longer access the QObject
|
||||||
|
passed to its constructor. unblock(), reblock(), as well as
|
||||||
|
~QSignalBlocker() will have no effect.
|
||||||
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QObject
|
\class QObject
|
||||||
\inmodule QtCore
|
\inmodule QtCore
|
||||||
|
@ -454,6 +454,7 @@ public:
|
|||||||
|
|
||||||
inline void reblock() noexcept;
|
inline void reblock() noexcept;
|
||||||
inline void unblock() noexcept;
|
inline void unblock() noexcept;
|
||||||
|
inline void dismiss() noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_COPY(QSignalBlocker)
|
Q_DISABLE_COPY(QSignalBlocker)
|
||||||
@ -518,6 +519,11 @@ void QSignalBlocker::unblock() noexcept
|
|||||||
m_inhibited = true;
|
m_inhibited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QSignalBlocker::dismiss() noexcept
|
||||||
|
{
|
||||||
|
m_o = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
namespace QtPrivate {
|
namespace QtPrivate {
|
||||||
inline QObject & deref_for_methodcall(QObject &o) { return o; }
|
inline QObject & deref_for_methodcall(QObject &o) { return o; }
|
||||||
inline QObject & deref_for_methodcall(QObject *o) { return *o; }
|
inline QObject & deref_for_methodcall(QObject *o) { return *o; }
|
||||||
|
@ -11,6 +11,7 @@ class tst_QSignalBlocker : public QObject
|
|||||||
private slots:
|
private slots:
|
||||||
void signalBlocking();
|
void signalBlocking();
|
||||||
void moveAssignment();
|
void moveAssignment();
|
||||||
|
void dismiss();
|
||||||
};
|
};
|
||||||
|
|
||||||
void tst_QSignalBlocker::signalBlocking()
|
void tst_QSignalBlocker::signalBlocking()
|
||||||
@ -133,5 +134,15 @@ void tst_QSignalBlocker::moveAssignment()
|
|||||||
QVERIFY(!o2.signalsBlocked());
|
QVERIFY(!o2.signalsBlocked());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QSignalBlocker::dismiss()
|
||||||
|
{
|
||||||
|
QObject obj;
|
||||||
|
{
|
||||||
|
QSignalBlocker blocker(obj);
|
||||||
|
blocker.dismiss();
|
||||||
|
}
|
||||||
|
QVERIFY(obj.signalsBlocked());
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_MAIN(tst_QSignalBlocker)
|
QTEST_MAIN(tst_QSignalBlocker)
|
||||||
#include "tst_qsignalblocker.moc"
|
#include "tst_qsignalblocker.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user