从Qt5.3回到Qt4.8,有Q_DECLARE_METATYPE问题
Moving back from Qt5.3 to Qt4.8, having Q_DECLARE_METATYPE issues
由于我的工作要求,我不得不从Qt5.3恢复到Qt4.8,除了一些功能更改外,一切都很顺利,除了我得到了QMetaProperty::read: Unable to handle unregistered datatype
错误。有人遇到过这种情况吗?我很困惑,我不知道从哪里开始。据我所知,Q_DECLARE_METATYPE在Qt4.8中是一个有效的宏,其工作方式相同。我没有改变任何include或任何东西
下面的代码在Qt 4和Qt 5中工作相同。我不确定您做错了什么—如果没有看到一些代码,很难从大量混乱中想象出一个原因。你必须承认,"我刚刚在Qt 5中写了一堆代码,但它在Qt 4中不起作用"有点模糊。
#include <QtCore>
struct T {};
class C : public QObject {
Q_OBJECT
Q_PROPERTY(QList<T*> stuff READ stuff)
QList<T*> m_stuff;
public:
C(QObject * parent = 0) : QObject(parent) { m_stuff << (T*)10 << (T*)11; }
Q_SIGNAL void aSignal(const QList<T*>&);
Q_SLOT void aSlot(const QList<T*>& data) {
m_stuff = data;
}
QList<T*> stuff() const {
return m_stuff;
}
};
Q_DECLARE_METATYPE(QList<T*>)
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qRegisterMetaType<QList<T*> >();
C c;
c.connect(&c, SIGNAL(aSignal(QList<T*>)), SLOT(aSlot(QList<T*>)), Qt::QueuedConnection);
// Test reading a property
QMetaProperty p = c.metaObject()->property(c.metaObject()->indexOfProperty("stuff"));
auto s = p.read(&c).value<QList<T*> >();
Q_ASSERT(s == c.stuff());
// Test queued signal-slot connection
auto const data = QList<T*>() << (T*)1 << (T*)2;
emit c.aSignal(data);
a.processEvents();
Q_ASSERT(data == c.stuff());
return 0;
}
#include "main.moc"
相关文章:
- 编译器是否实际使用我的"omp declare simd"函数?
- #define 的"Declaration does not declare anything"错误
- typedef 中的自定义类型为 Qt MetaType
- Declare a cv::Mat of NaN
- 函数上漆"was not declare in this scope"
- 如何"declare"全局结构?
- C++ - "Cannot declare parameter 'anonymous' to be of abstract type"
- "declaration does not declare anything"错误的原因是什么?
- "Declaration does not declare anything"和"expected unqualified-id"
- "You can't forward declare classes that overload operator&" ?