我有
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
两个片段之间有什么区别,为什么第一个片段有效,第二个片段没有?
答案 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。