diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 192d4616b1..fa30fd29a7 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -179,7 +179,7 @@ inline Q_DECL_CONSTEXPR int qMetaTypeId();
     F(QRegion, 72, QRegion) \
     F(QBitmap, 73, QBitmap) \
     F(QCursor, 74, QCursor) \
-    QT_FOR_EACH_STATIC_KEYSEQUENCE_CLASS(F) \
+    F(QKeySequence, 75, QKeySequence) \
     F(QPen, 76, QPen) \
     F(QTextLength, 77, QTextLength) \
     F(QTextFormat, 78, QTextFormat) \
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp
index 3d075bf92f..796e203fd2 100644
--- a/src/widgets/widgets/qpushbutton.cpp
+++ b/src/widgets/widgets/qpushbutton.cpp
@@ -61,6 +61,8 @@
 #if QT_CONFIG(dialogbuttonbox)
 #include "qdialogbuttonbox.h"
 #endif
+#include <qkeysequence.h>
+#include <qlibraryinfo.h>
 
 #ifndef QT_NO_ACCESSIBILITY
 #include "qaccessible.h"
@@ -384,6 +386,101 @@ bool QPushButton::isDefault() const
     return d->defaultButton;
 }
 
+static QByteArray dataToHex(const void *d, size_t size)
+{
+    return "0x" + QByteArray(reinterpret_cast<const char*>(d), int(size)).toHex();
+}
+
+QDebug operator<<(QDebug d, const QtPrivate::QMetaTypeInterface &mif)
+{
+    QDebugStateSaver saver(d);
+    d.noquote();
+    d.nospace();
+    d << "QMetaTypeInterface(\"" << mif.name << "\", size=" << mif.size
+        << ",ref=" << mif.ref.atomic.loadRelaxed()
+        << ", align=" << mif.alignment << ", flags="
+        << Qt::hex << Qt::showbase << mif.flags << Qt::dec << Qt::noshowbase
+        << ", delSelf=" << reinterpret_cast<const void *>(mif.deleteSelf)
+        << ", defaultCtr=" << reinterpret_cast<const void *>(mif.defaultCtr)
+        << ", copyCtr=" << reinterpret_cast<const void *>(mif.defaultCtr)
+        << ", moveCtr=" << reinterpret_cast<const void *>(mif.moveCtr)
+        << ", dtor=" << reinterpret_cast<const void *>(mif.dtor) << ')';
+    return d;
+}
+
+QDebug operator<<(QDebug d, const QMetaType &mt)
+{
+    QDebugStateSaver saver(d);
+    d.noquote();
+    d.nospace();
+    d << "QMetaType(" << mt.id() << ", \"" << mt.name() << "\", size=" << mt.sizeOf();
+    if (mt.isValid()) {
+        if (mt.isRegistered())
+            d << ", registered";
+        d << ", flags=" << Qt::hex << Qt::showbase << int(mt.flags()) << '/'
+          << Qt::dec << Qt::noshowbase
+          << mt.flags()
+          << ", data=" <<  dataToHex(reinterpret_cast<const char*>(&mt), sizeof(mt));
+        auto mif = *reinterpret_cast<const QtPrivate::QMetaTypeInterface * const *>(&mt);
+        d << ", " << *mif;
+    } else {
+        d << ", invalid!";
+    }
+    d << ')';
+    return d;
+}
+
+auto m1  = QMetaType(QtPrivate::qMetaTypeInterfaceForType<QIcon>());
+auto m2  = QMetaType(QtPrivate::qMetaTypeInterfaceForType<QKeySequence>());
+
+QMetaType  QPushButton::testMt1()
+{
+    return m1;
+}
+
+QMetaType  QPushButton::testMt2()
+{
+    return m2;
+}
+
+template <typename T>
+QDebug operator<<(QDebug d, const QMetaTypeId2<T> &)
+{
+    QDebugStateSaver saver(d);
+    d.noquote();
+    d.nospace();
+    d << "QMetaTypeForType(\"" << QMetaTypeId2<T>::name
+      << "\", qt_metatype_id()=" << QMetaTypeId2<T>::qt_metatype_id()
+      << ", builtin=" << QMetaTypeId2<T>::IsBuiltIn << ')';
+    return d;
+}
+
+template<typename T>
+QDebug operator<<(QDebug d, const QtPrivate::QMetaTypeForType<T> &)
+{
+    QDebugStateSaver saver(d);
+    d.noquote();
+    d.nospace();
+    d << "QtPrivate::QMetaTypeForType(metaType=" << QtPrivate::QMetaTypeForType<T>::metaType << ')';
+    return d;
+}
+
+auto nameLambda = [](auto) constexpr  -> const char * {
+    if constexpr (bool(QMetaTypeId2<QKeySequence>::IsBuiltIn))
+        return QMetaTypeId2<QKeySequence>::name;
+    return "";
+    };
+
+QMetaType QPushButton::testMt3()
+{
+    qDebug().noquote().nospace() << '>' << __FUNCTION__ << "()\n"
+            << "nameLambda returns " << nameLambda(0) << '\n'
+             << QMetaTypeId2<QKeySequence>() << '\n'
+             << QtPrivate::QMetaTypeForType<QKeySequence>()
+             << "\n<" << __FUNCTION__ << "()\n";
+    return QMetaType(QtPrivate::qMetaTypeInterfaceForType<QKeySequence>());
+}
+
 /*!
     \reimp
 */
diff --git a/src/widgets/widgets/qpushbutton.h b/src/widgets/widgets/qpushbutton.h
index 283dfe2c61..73d12ee5a3 100644
--- a/src/widgets/widgets/qpushbutton.h
+++ b/src/widgets/widgets/qpushbutton.h
@@ -66,6 +66,10 @@ public:
     QPushButton(const QIcon& icon, const QString &text, QWidget *parent = nullptr);
     ~QPushButton();
 
+    static QMetaType testMt1();
+    static QMetaType testMt2();
+    static QMetaType testMt3();
+
     QSize sizeHint() const override;
     QSize minimumSizeHint() const override;
 
