【问题标题】:undefined symbols on qml extension (from example)qml 扩展上的未定义符号(来自示例)
【发布时间】:2016-01-01 21:03:24
【问题描述】:

我正在尝试改编一个来自 qt 的简单示例(使用 qt creator 3.5.1,来自 qt 5.5.1)来创建一个新的 qml 类型。这是微不足道的新类型:

class Person : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString name READ name WRITE setName)
    Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
public:
    Person(QObject *parent = 0): QObject(parent), m_shoeSize(0) {}

    QString name() const { return m_name; }
    void setName(const QString & name) { m_name = name; }

    int shoeSize() const { return m_shoeSize; }
    void setShoeSize(int s) { m_shoeSize = s; }

private:
    QString m_name;
    int m_shoeSize;
};

当我尝试注册时:

qmlRegisterType<Person>("People", 1,0, "Person");

我明白了

架构 x86_64 的未定义符号:
“Person::qt_metacall(QMetaObject::Call, int, void**)”,引用 从: main.o "Person::qt_metacast(char const*)" 中 QQmlPrivate::QQmlElement 的 vtable,引用自:...

我想我需要在 .pro 文件中添加一个“库”,但我不知所措。 有什么想法吗?

我已经有以下:

QT += core qml quick widgets

【问题讨论】:

  • 你有一个Person类的实现吗?您是否将其添加到项目文件(.pro)中?
  • 上面的声明给出了实现。我将整个类定义放在“main.cpp”中,否则它工作得很好。 (即,在我尝试添加 qml 扩展类型之前,qt 项目正在生成我想要的内容。)
  • 尝试包含生成的moc文件#include "main.moc" 或将Person类放在单独的文件中。
  • 放入单独的 .h/.cpp 文件解决了这个问题。我没想到。

标签: c++ qt


【解决方案1】:

根据 tpr 的建议:该示例将 Person 放在单独的 .h/.cpp 文件中。当我这样做时,程序成功编译。 没有预料到。

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多