这是这问题的后续内容.这篇文章应该解释为什么我要使用quint16来提取变体类型。
我从QVariant派生了类QVariant,并实现了QDataStream读操作符。
这允许构造如下:
MyVariant vt;
str >> vt;这是流实现:
QDataStream& operator>>(QDataStream& str, MyVariant& vt)
{
vt.clear();
quint16 type;
str >> type;
const QMetaType vtype(type);
if (vtype.isValid()) {
vt.create(type, nullptr);
if (!QMetaType::load(str, type, const_cast<void *>(vt.constData()))) {
Q_ASSERT_X(false, "MyVariant", qPrintable(QString("Cannot load type %u").arg(type)));
str.setStatus(QDataStream::ReadCorruptData);
}
}
else {
Q_ASSERT_X(false, "MyVariant", qPrintable(QString("Type %1 is not supported").arg(type)));
}
return str;
}当流遇到QColor (67)时,此代码无法为其创建有效的QMetaType。QMetaType::isValid()返回false。
我还能忘记做什么?
不确定是否重要,但我已将QT += gui添加到.pro文件中。
编辑
我补充了..。
int type = qRegisterMetaType<QColor>("QColor");..。我的主要职责。它返回67,但是当我点击我的流函数时,QMetaType的创建仍然失败。
发布于 2021-09-20 21:41:46
好吧,我完全靠运气解决了这件事。
在我的主题栏里,我用.
qRegisterMetaTypeStreamOperators<QColor>("QColor");现在起作用了!如果我做的对不对,请在评论中告诉我。
https://stackoverflow.com/questions/69259025
复制相似问题