C++ QT 将 QList 中的项目转换为子项 类

C++ QT Casting to child classes for items in a QList

我有一个 PrintableObject* 类型的 QList,例如:

QList<PrintableObject*> drawables;

此列表包含 PrintableX 类型的对象,它们是 PrintableObject 的子类,插入方式如下:

drawables += &PrintableLine( x, y, x2, y2 );

在此之后我使用列表循环确定实际类型,进行转换并尝试使用它:

foreach(PrintableObject* drawable, drawables){

       if(drawable->myClassName == "PrintableLine") {

           PrintableLine* line = (PrintableLine*) drawable;
           painter.drawLine(line->x, line->y, line->x2, line->y2);

       } else if (drawable->myClassName == "PrintableString") {

           PrintableString* string = (PrintableString*) drawable;
           font.setPointSize(string->fontSize);
           painter.setFont(font);

           painter.drawText(string->x, string->y, string->width, string->height, Qt::AlignHCenter | Qt::AlignTop, string->string "if I say?");

       }

   }

除了,当我尝试使用我新的闪亮向下倾斜的对象时,它会出现分段错误...

有什么建议吗?

您似乎在列表中插入了一个指向死临时对象的指针:

drawables += &PrintableLine( x, y, x2, y2 );

尝试:

drawables += new PrintableLine( x, y, x2, y2 );

您可能还需要考虑将虚拟 draw 方法添加到您的 PrintableObject class 避免 RTTI 和向下转换的需要。