我有一个 QList 类型,PrintableObject*
如:
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 );
您可能还需要考虑将虚拟绘制方法添加到PrintableObject类中,以避免需要 RTTI 和向下转换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句