与泛型混淆

时间:2011-12-09 21:01:54

标签: c++ qt

我有

class Foo : public QFrame {...}

在使用这个类的模块中,我有

QWidget* screen = this->parentWidget();
Foo* foo = (Foo*) screen->findChild<QFrame*>("foo1"); // foo1 is the name of the control from .ui file

这是有效的。如果我将其更改为

QWidget* screen = this->parentWidget();
Foo* foo = screen->findChild<Foo*>("foo1"); // foo1 is the name of the control from .ui file

我收到此链接器错误

  

错误4错误LNK2001:未解析的外部符号“public:static   struct QMetaObject const Foo :: staticMetaObject“   (?staticMetaObject @ Foo @@ 2UQMetaObject @@ B)Foo.obj

两个片段之间有什么区别,为什么第一个片段有效,第二个片段没有?

2 个答案:

答案 0 :(得分:3)

这可能是因为 Foo 类缺少 Q_DECLARE_METATYPE

来自Qt Documenation

Adding a Q_DECLARE_METATYPE() makes the type 
known to all template based functions

这样的东西
class Foo : public QFrame
{
 //everything
}

Q_DECLARE_METATYPE(Foo)

答案 1 :(得分:1)

您的类Foo可能缺少Q_OBJECT宏。 添加它,如果你使用QMake,将标题添加到HEADERS列表并重新运行qmake。