[英]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 );
您可能還需要考慮將虛擬繪制方法添加到PrintableObject類中,以避免需要RTTI和向下轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.