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 和向下转换的需要。
我有一个 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 和向下转换的需要。