簡體   English   中英

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 );

您可能還需要考慮將虛擬繪制方法添加到PrintableObject類中,以避免需要RTTI和向下轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM