- class QMetaType#
-
概要#
方法#
def
__init__()
def
alignOf()
def
construct()
def
create()
def
destroy()
def
destruct()
def
equals()
def
flags()
定义
id()
定义
isOrdered()
定义
isValid()
定义
load()
定义
name()
定义
__ne__()
定义
__eq__()
定义
save()
定义
sizeOf()
静态函数#
定义
canConvert()
定义
canView()
定义
compare()
def
construct()
定义
convert()
def
create()
def
destroy()
def
destruct()
def
equals()
定义
fromName()
定义
load()
定义
save()
定义
sizeOf()
定义
type()
定义
typeFlags()
定义
typeName()
定义
view()
注意
本文档可能包含自动从C++翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译中存在问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建票据的方式告知我们。
详细描述#
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
此类用作在
QVariant
和排队中的信号和槽连接处进行类型序列化的辅助工具。它将类型名称与类型关联,以便在运行时动态创建和销毁。类型名称可以通过使用
QMetaType
以及qRegisterMetaType()
或registerType()
方法进行注册。大多数操作不需要注册;只有当尝试将字符串形式的类型名称解析回QMetaType
对象或类型ID时才需要注册。这包括某些使用connect()
的旧式信号-槽连接、从QDataStream
读取用户类型到QVariant
或绑定到QML、D-Bus、JavaScript等其他语言和IPC机制等操作。以下代码通过其名称分配和销毁
MyClass
的一个实例,这要求之前已注册MyClass
。type = QMetaType.fromName("MyClass") if type.isValid(): myClassPtr = type.create() ... type.destroy(myClassPtr) myClassPtr = None
如果想要流运算符
operator<<()
和operator>>()
在存储自定义类型的QVariant
对象上工作,那么必须为自定义类型提供operator<<()
和operator>>()
运算符。另请参阅
Q_DECLARE_METATYPE()
setValue()
value()
fromValue()
- class Type#
(继承自
enum.IntEnum
) 这些是QMetaType
支持的内置类型。常量
描述
QMetaType.Void
void
QMetaType.Bool
bool
QMetaType.Int
int
QMetaType.UInt
unsigned int
QMetaType.Double
double
QMetaType.QChar
QChar
QMetaType.QString
QString
QMetaType.QByteArray
QByteArray
QMetaType.Nullptr
std::nullptr_t
QMetaType.VoidStar
void *
QMetaType.Long
long
QMetaType.LongLong
LongLong
QMetaType.Short
short
QMetaType.Char
char
QMetaType.Char16
char16_t
QMetaType.Char32
char32_t
QMetaType.ULong
unsigned long
QMetaType.ULongLong
ULongLong
QMetaType.UShort
unsigned short
QMetaType.SChar
signed char
QMetaType.UChar
unsigned char
QMetaType.Float
float
QMetaType.Float16
qfloat16
QMetaType.QObjectStar
QObject
*QMetaType.QCursor
QCursor
QMetaType.QDate
QDate
QMetaType.QSize
QSize
QMetaType.QTime
QTime
QMetaType.QVariantList
QVariantList
QMetaType.QPolygon
QPolygon
QMetaType.QPolygonF
QPolygonF
QMetaType.QColor
QColor
QMetaType.QColorSpace
QColorSpace (引入于 Qt 5.15)
QMetaType.QSizeF
QSizeF
QMetaType.QRectF
QRectF
QMetaType.QLine
QLine
QMetaType.QTextLength
QTextLength
QMetaType.QStringList
QStringList
QMetaType.QVariantMap
QVariantMap
QMetaType.QVariantHash
QVariantHash
QMetaType.QVariantPair
QVariantPair
QMetaType.QIcon
QIcon
QMetaType.QPen
QPen
QMetaType.QLineF
QLineF
QMetaType.QTextFormat
QTextFormat
QMetaType.QRect
QRect
QMetaType.QPoint
QPoint
QMetaType.QUrl
QUrl
QMetaType.QRegularExpression
QRegularExpression
QMetaType.QDateTime
QDateTime
QMetaType.QPointF
QPointF
QMetaType.QPalette
QPalette
QMetaType.QFont
QFont
QMetaType.QBrush
QBrush
QMetaType.QRegion
QRegion
QMetaType.QBitArray
QBitArray
QMetaType.QImage
QImage
QMetaType.QKeySequence
QKeySequence
QMetaType.QSizePolicy
QSizePolicy
QMetaType.QPixmap
QPixmap
QMetaType.QLocale
QLocale
QMetaType.QBitmap
QBitmap
QMetaType.QTransform
QTransform
QMetaType.QMatrix4x4
QMatrix4x4
QMetaType.QVector2D
QVector2D
QMetaType.QVector3D
QVector3D
QMetaType.QVector4D
QVector4D
QMetaType.QQuaternion
QQuaternion
QMetaType.QEasingCurve
QEasingCurve
QMetaType.QJsonValue
QJsonValue
QMetaType.QJsonObject
QJsonObject
QMetaType.QJsonArray
QJsonArray
QMetaType.QJsonDocument
QJsonDocument
QMetaType.QCborValue
QCborValue
QMetaType.QCborArray
QCborArray
QMetaType.QCborMap
QCborMap
QMetaType.QCborSimpleType
QCborSimpleType
QMetaType.QModelIndex
QModelIndex
QMetaType.QPersistentModelIndex
QPersistentModelIndex (引入于 Qt 5.5)
QMetaType.QUuid
QUuid
QMetaType.QByteArrayList
QByteArrayList
QMetaType.QVariant
QVariant
QMetaType.User
用户类型的基值
QMetaType.UnknownType
这是一个无效的类型标识符。当类型未注册时,从
QMetaType
返回。可以借助
qRegisterMetaType()
或调用registerType()
注册额外的类型。另请参阅
- class TypeFlag#
(继承自
enum.Flag
) 该枚举描述了由QMetaType
支持的类型属性。常量
描述
QMetaType.NeedsConstruction
此类型具有默认构造函数。如果未设置此标志,则可以使用 memset 到 0 安全地初始化实例。
QMetaType.NeedsCopyConstruction
(自 6.5 版起) 此类型具有非平凡的复制构造函数。如果未设置此标志,则可以使用 memcpy 复制实例。
QMetaType.NeedsMoveConstruction
(自 6.5 版起) 此类型具有非平凡的移动构造函数。如果未设置此标志,则可以使用 memcpy 移动实例。
QMetaType.NeedsDestruction
此类型具有非平凡的析构函数。如果未设置此标志,则不需要在丢弃对象之前调用析构函数。
QMetaType.RelocatableType
具有此属性的类型的实例可以安全地使用memcpy移动到不同的内存位置。
QMetaType.IsEnumeration
此类型是枚举类型。
QMetaType.IsUnsignedEnumeration
如果类型是枚举,则其底层类型是无符号的。
QMetaType.PointerToQObject
此类型是指向从
QObject
派生出来的类的指针。QMetaType.IsPointer
此类型是指向其他类型的指针。
QMetaType.IsConst
表示此类型的值不可变;例如,因为它们是指向const对象的指针。
注意
在Qt 6.5之前,如果复制构造函数或析构函数非平凡(即类型不是平凡的),则错误地设置了NeedsConstruction和NeedsDestruction标志。
请注意,需要标志可能已设置,但元类型可能没有公开可访问的相关类型的构造函数或公开可访问的析构函数。
- __init__(arg__1)#
- 参数:
arg__1 –
PyTypeObject
- __init__()
构造一个默认的、无效的、
QMetaType
对象。- __init__(type)
- 参数:
type – int
构造一个包含有关类型
typeId
所有信息的QMetaType
对象。- __init__(arg__1)
- 参数:
arg__1 –
Type
- alignOf()#
- 返回类型::
int
以字节为单位返回类型的对齐(即alignof(T),其中T为此
QMetaType
实例构建的实际类型T)。该函数通常与construct()结合使用,以执行类型使用的内存的底层管理。
另请参阅
如果
convert
能够将fromType
转换为toType
,则返回true
。Qt 支持以下转换:
类型
自动转换为目标类型
QChar
,Double
,Int
,LongLong
,QString
,UInt
,ULongLong
Double
,Int
,LongLong
,QString
,UInt
,ULongLong
,QUuid
Bool
,QChar
,Double
,LongLong
,QString
,UInt
,ULongLong
QStringList
(如果列表项目可以转换为 QStrings)Bool
,QByteArray
,QChar
,Double
,Int
,QString
,UInt
,ULongLong
Bool
,QByteArray
,QChar
,QColor
,QDate
,QDateTime
,Double
,QFont
,Int
,QKeySequence
,LongLong
,QStringList
,QTime
,UInt
,ULongLong
,QUuid
QVariantList
,QString
(如果列表中正好有一个项目)Bool
,QChar
,Double
,Int
,LongLong
,QString
,ULongLong
支持对基本类型(int、float、bool等)之间的转换。
如果从由
fromType
描述的类型到由toType
描述的类型进行qobject_cast
会成功,则类型继承自QObject
的指针之间的转换将返回 true。如果
toType
是QVariantList
,则从顺序容器到该函数的转换也会返回 true。类似地,如果
toType
是QVariantHash
或QVariantMap
,则从关联容器到该函数的转换也会返回 true。另请参阅
convert()
QSequentialIterable
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()
QAssociativeIterable
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()
如果
view
能在类型为fromType
的数据上创建一个可变的视图类型为toType
,则返回true
。在类型派生自
QObject
的指针之间进行转换,如果从描述为fromType
的类型到描述为toType
的类型的qobject_cast
成功,则此函数将返回 true。您可以在标记为
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()
的任何容器上创建类型为QSequentialIterable
的可变视图。类似地,您也可以在任何标记为
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()
的容器上创建类型为QAssociativeIterable
的可变视图。另请参阅
convert()
QSequentialIterable
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()
QAssociativeIterable
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()
- static compare(lhs, rhs, typeId, result)#
- 参数:
lhs –
void
rhs –
void
typeId – int
result – int
- 返回类型::
bool
注意
此函数已弃用。
请使用非静态比较方法
比较
lhs
和rhs
处的对象。这两个对象都必须是typeId
的类型。如果lhs
小于、等于或大于rhs
,则result
被设置为小于、等于或大于零。如果比较成功,返回true
,否则返回false
。- static construct(type, where, copy)#
- 参数:
type – int
where –
void
copy –
void
- 返回类型::
void
注意
此函数已弃用。
在由
where
指定的现有内存位置中构造给定type
的值,即copy
的副本,并返回where
。如果copy
为零,则构造默认值。这是一个用于显式管理存储类型的内存的底层函数。如果您不需要此级别的控制(即使用“new”而不是“placement new”),请考虑调用
create()
。您必须确保
where
指向一个可以存储type
类型值的地址,并且where
的封装适当。可以通过调用sizeOf()
获取类型的尺寸。对齐规则通常是:一个类型对齐到其自然边界,即大于类型的最小2的幂,除非该对齐大于平台的最大有用对齐值。为了实际目的,仅有特殊硬件指令(例如,x86上的对齐SSE加载和存储)才需要大于2 * sizeof(void*)的对齐。
另请参阅
- construct(where[, copy=None])
- 参数:
where –
void
copy –
void
- 返回类型::
void
在该实例根据
where
构建的内存中构建该类型的值,作为copy
的副本,并返回where
。如果copy
为零,则执行默认构建。这是一个用于显式管理存储类型的内存的低级别函数。如果您不需要这种级别的控制(即使用“placement new”而不是“new”),请考虑调用create()。
您必须确保
where
指向可以存储新值的地址,并且where
的封装适当。可以通过调用sizeOf()
获取类型的尺寸。对齐规则通常是:一个类型对齐到其自然边界,即大于类型的最小2的幂,除非该对齐大于平台的最大有用对齐值。为了实际目的,仅有特殊硬件指令(例如,x86上的对齐SSE加载和存储)才需要大于2 * sizeof(void*)的对齐。
- static convert(fromType, from, toType, to)#
将位于
from
的对象从fromType
转换为位于to
的预分配空间并以其类型toType
存储。如果转换成功,则返回true
,否则返回false
。必须确保
from
和to
都是合法的指针。- static convert(from, fromTypeId, to, toTypeId)
- 参数:
from –
void
fromTypeId – int
to –
void
toTypeId – int
- 返回类型::
bool
注意
此函数已弃用。
将位于
from
的对象从fromTypeId
转换到预设空间to
的toTypeId
类型。如果转换成功,则返回true
,否则返回 false。必须确保
from
和to
都是合法的指针。- create([copy=None])#
- 参数:
copy –
void
- 返回类型::
void
返回
copy
的副本,假设其类型与创建此QMetaType
实例的类型相同。如果copy
为None
,则创建一个默认构造的实例。另请参阅
- static create(type[, copy=None])
- 参数:
type – int
copy –
void
- 返回类型::
void
注意
此函数已弃用。
返回
copy
的副本,假设它的类型是type
。如果copy
为零,则创建一个默认构造的实例。另请参阅
- static destroy(type, data)#
- 参数:
type – int
data –
void
注意
此函数已弃用。
销毁
data
,假设其类型是给定的type
。另请参阅
- destroy(data)
- 参数:
data –
void
销毁
data
,假设其类型与此QMetaType
实例相同的类型。另请参阅
- static destruct(type, where)#
- 参数:
type – int
where –
void
注意
此函数已弃用。
销毁指定
type
的where
位置的值。与
destroy()
不同,此函数只调用类型的析构函数,并不调用删除操作符。另请参阅
- destruct(data)
- 参数:
data –
void
假定值位于
data
,销毁该值,假设它是为此QMetaType
实例创建的类型。与 destroy() 不同,此函数只调用类型的析构函数,不调用删除操作符。
另请参阅
- equals(lhs, rhs)#
- 参数:
lhs –
void
rhs –
void
- 返回类型::
bool
比较
lhs
和rhs
位置的值是否相等。两个对象必须为该元类型描述的类型。只有在该类型的比较运算符对元类型声明可见时,才能比较这两个对象。否则,元类型 never 考虑值相等。当比较运算符对元类型声明可见时,它是权威的;否则,如果可见 "小于",当两个值都不小于对方时,它们被认为是相等的。如果值是无序的(参见
compare()
了解详细信息),它们不相等。如果两个对象相等则返回 true,否则返回 false。
- static equals(lhs, rhs, typeId, result)
- 参数:
lhs –
void
rhs –
void
typeId – int
result – int
- 返回类型::
bool
注意
此函数已弃用。
返回为此
QMetaType
实例创建的类型。要检查特定的类型特性,请使用“is-”函数之一,而不是直接使用标志。返回一个匹配
typeName
的QMetaType
。如果 typeName 未知,返回的对象无效。- static hasRegisteredConverterFunction(fromType, toType)#
如果元类型系统已注册从元类型 ID
fromType
到toType
的转换,则返回true
。- hasRegisteredDataStreamOperators()#
- 返回类型::
bool
如果元类型系统已为此元类型注册数据流运算符,则返回
true
。- hasRegisteredDebugStreamOperator()#
- 返回类型::
bool
如果元类型系统已为此元类型注册调试流运算符,则返回
true
。- static hasRegisteredDebugStreamOperator(typeId)
- 参数:
typeId – int
- 返回类型::
bool
注意
此函数已弃用。
请使用
hasRegisteredDebugStreamOperator()
替代。如果元类型系统已注册类型 ID
typeId
的调试流运算符,则返回true
。- static hasRegisteredMutableViewFunction(fromType, toType)#
如果元类型系统已在元类型 ID
fromType
的可变视图上注册了元类型 IDtoType
,则返回true
。- id([arg__1=0])#
- 参数:
arg__1 – int
- 返回类型::
int
- isCopyConstructible()#
- 返回类型::
bool
如果此类型可以进行复制构造,则返回 true。如果可以,则可以使用非 null 的
copy
参数调用 construct() 和 create()。- isDefaultConstructible()#
- 返回类型::
bool
如果此类型可以默认构造,则返回 true。如果可以,则可以使用 null 的
copy
参数调用 construct() 和 create()。- isDestructible()#
- 返回类型::
bool
如果此类型可以销毁,则返回 true。如果可以,则可以调用 destroy() 和 destruct()。
- isEqualityComparable()#
- 返回类型::
bool
如果描述此元类型的类型有可见的小于或等于运算符,则返回
true
,否则返回false
。另请参阅
- isMoveConstructible()#
- 返回类型::
bool
如果此类型可以移动构造,则返回 true。目前 QMetaType 没有使用此特性的 API。
- isOrdered()#
- 返回类型::
bool
如果此元类型描述的类型可见于元类型声明中的小于(less than)运算符,则返回
true
;否则返回false
。- isRegistered()#
- 返回类型::
bool
如果此
QMetaType
对象已注册到 Qt 全局元类型注册表中,则返回true
。注册允许通过名称(使用fromName()
)或通过其 ID(使用构造函数)找到类型。另请参阅
qRegisterMetaType()
isValid()
- static isRegistered(type)
- 参数:
type – int
- 返回类型::
bool
如果具有 ID
type
的数据类型已注册,则返回true
;否则返回false
。另请参阅
- isValid()#
- 返回类型::
bool
如果这个
QMetaType
对象包含有关类型的有效信息,则返回true
,否则返回false
。另请参阅
- 静态 load(stream, type, data)#
- 参数:
stream –
QDataStream
type – int
data –
void
- 返回类型::
bool
注意
此函数已弃用。
这是一个重载函数。
- load(stream, data)
- 参数:
stream –
QDataStream
data –
void
- 返回类型::
bool
从给定的
stream
读取此类对象到data
中。如果对象加载成功,则返回true
;否则返回false
。通常,您不需要直接调用此函数。相反,使用
QVariant
的operator>>()
,它依赖于load()以流式传输自定义类型。另请参阅
- 静态 metaObjectForType(type)#
- 参数:
type – int
- 返回类型::
注意
此函数已弃用。
返回类型
type
的metaObject
另请参阅
metaObject()
- name()#
- 返回类型::
字符串
返回与此
QMetaType
关联的类型名称,或者在找不到匹配类型时返回空指针。返回的指针不得删除。另请参阅
这是一个重载函数。
如果
QMetaType
a
表示的类型与QMetaType
b
不同,则返回true
,否则返回false
。这是一个重载函数。
如果
QMetaType
a
表示与QMetaType
b
相同的类型,则返回true
,否则返回false
.- 静态registerNormalizedTypedef(normalizedTypeName, type)#
- 参数:
normalizedTypeName –
QByteArray
type –
QMetaType
- registerType()#
将此
QMetaType
注册到类型注册表中,以便可以通过名称使用fromName()
查找它。另请参阅
qRegisterMetaType()
- save(stream, data)#
- 参数:
stream –
QDataStream
data –
void
- 返回类型::
bool
将
data
所指的对象写入给定的stream
。如果对象成功保存,则返回true
,否则返回false
.通常,您不需要直接调用此函数。相反,使用
QVariant
的operator<<()
,它依赖于 save() 将自定义类型流式传输。另请参阅
- 静态save(stream, type, data)
- 参数:
stream –
QDataStream
type – int
data –
void
- 返回类型::
bool
注意
此函数已弃用。
这是一个重载函数。
- sizeOf()#
- 返回类型::
int
返回类型的字节大小(即 sizeof(T),其中 T 是为该
QMetaType
实例构造的实际类型)。该函数通常与construct()结合使用,以执行类型使用的内存的底层管理。
另请参阅
- 静态 sizeOf(type)
- 参数:
type – int
- 返回类型::
int
注意
此函数已弃用。
返回给定
type
的大小(以字节为单位)(即 sizeof(T),其中 T 是type
参数指明的实际类型)。此函数通常与
construct()
一起使用,以对类型使用的内存进行底层管理。另请参阅
- 静态 type(typeName)#
- 参数:
typeName –
QByteArray
- 返回类型::
int
注意
此函数已弃用。
这是一个重载函数。
返回名为
typeName
的类型的句柄,如果没有此类类型,则返回 0。另请参阅
- 静态 type(typeName)
- 参数:
typeName – str
- 返回类型::
int
注意
此函数已弃用。
返回名为
typeName
的类型的句柄,如果没有此类类型,则返回UnknownType
。另请参阅
返回给定
type
的标志。另请参阅
TypeFlags
- 静态 typeName(type)#
- 参数:
type – int
- 返回类型::
字符串
注意
此函数已弃用。
返回与给定
typeId
关联的类型名,如果未找到匹配的类型,则返回空指针。返回的指针不得删除。另请参阅
如果这种元类型代表枚举,则此方法返回与枚举基础类型相同的有符号性和大小的数值类元类型。如果它表示
QFlags
类型,则返回Int
。在所有其他情况下,返回一个无效的QMetaType
。- 静态 view(fromType, from, toType, to)#
在
to
预留的空间中对from
的对象创建一个fromType
可变视图。如果转换成功,则返回true
,否则返回false
。