奇怪的QMetaObject错误

Strange QMetaObject error

本文关键字:错误 QMetaObject      更新时间:2023-10-16

我有一个类"RegistrationList",它保存了一个指向三种不同类型注册的指针列表。我有一个函数calculateFees(),它应该返回一种注册类型的总注册费用。我应该使用QT元对象系统来检查特定类型注册的实例列表,但当我运行程序时,我得到以下错误:

C:QtQt5.3.0ToolsQtCreatorbinbuild-a2-q1-Desktop_Qt_5_3_0_MinGW_32bit-Debugdebugmoc_registrationlist.cpp:63:错误:'staticMetaObject'不是'QList'的成员QList::staticMetaObject, qt_meta_stringdata_RegistrationList.data,^

calculateFees函数的代码:

double RegistrationList::totalFees(QString t) {
    double total = 0.00;
    for (int i = 0; i <= this->size(); ++i) {
        if (attendeeList.at(i)->metaObject()->className() == t)
            total += this->at(i)->calculateFee();
    }
    return total;
}

QList不是从QObject派生的

第一个谷歌结果的"错误:'staticMetaObject'不是"的成员;链接

这就是说QTreeWidgetItem不从QObject继承,这意味着您自己的单继承类也不从QObject继承。继承QObject是使用Q_OBJECT宏的先决条件之一,如果你像我一样,你会自动将它插入到任何Qt GUI相关的类中。

如果你不使用任何元对象的东西在你的子类,如信号/槽或属性,只是拿出Q_OBJECT宏。如果您需要使用信号和槽,您还需要使您的子类从QObject多重继承。如果您采用这种方式,请记住"多重继承要求QObject必须是first",否则您将得到与上面相同的错误,或者类似于"YourClass继承自两个QObject子类"的错误。从moc.

QList代替QTreeWidgetItem,就可以了