首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMetaType和继承

QMetaType和继承
EN

Stack Overflow用户
提问于 2011-08-15 11:17:19
回答 1查看 1K关注 0票数 3

好了,我对Qt和C++都是新手。我正在尝试将QMetaType用于我自己的类,但我无法将其用于子类。这就是我的问题(抱歉,可能有很多问题):

testparent.h:

代码语言:javascript
复制
#include <QMetaType>

class TestParent
{
public:
    TestParent();
    ~TestParent();
    TestParent(const TestParent &t);
    virtual int getSomething(); // in testparent.cpp, just one line returning 42
    int getAnotherThing();      // in testparent.cpp, just one line returning 99
};

Q_DECLARE_METATYPE(TestParent)

这是test1.h:

代码语言:javascript
复制
#include <QMetaType>
#include "testparent.h"

class Test1 : public TestParent
{
public:
    Test1();
    ~Test1();
    Test1(const Test1 &t);
    int getSomething();          // int test1.cpp, just one line returning 67
};

Q_DECLARE_METATYPE(Test1)

..。(除非另有说明,此处声明的所有成员都定义为在testparent.cpp或test1.cpp中不执行任何操作(只需左方括号、右方括号))下面是main.cpp:

代码语言:javascript
复制
#include <QtGui/QApplication>
#include "test1.h"
#include "testparent.h"
#include <QDebug>

int main(int argc, char *argv[])
{
    int id = QMetaType::type("Test1");

    TestParent *ptr = new Test1;
    Test1 *ptr1 = (Test1*)(QMetaType::construct(id));
//    TestParent *ptr2 = (TestParent*)(QMetaType::construct(id));

    qDebug() << ptr->getSomething();
    qDebug() << ptr1->getSomething();     // program fails here
//    qDebug() << ptr2->getAnotherThing();
//    qDebug() << ptr2->getSomething();

    delete ptr;
    delete ptr1;
//    delete ptr2;

    return 0;
}

正如您所看到的,我曾尝试用ptr2测试一些多态性的东西,但是后来我意识到ptr1甚至不能工作。(编辑:上一句没有任何意义。哦,问题解决了(编辑: nvm它确实有意义))当我运行这是第一个qDebug打印67的时候发生了什么,正如预期的那样,然后它被卡住了几秒钟,最后退出,代码是-1073741819。

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-15 15:00:02

类型必须注册!宏Q_DECLARE_METATYPE是不够的。main函数的开头缺少一行:

代码语言:javascript
复制
qRegisterMetaType<Test1>("Test1");

现在您可以获得不为零的id (这意味着该类型已注册):

代码语言:javascript
复制
int id = QMetaType::type("Test1");
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7061416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档