C++ QT Casting 到 QList 中项目的子类

志嘎林 - 恢复 CMs

我有一个 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++ / QT中创建抽象类对象的QList?

来自分类Dev

QList qt5.3中的比较项目

来自分类Dev

比较QList qt5.3中的项目

来自分类Dev

C ++-QList中的指针

来自分类Dev

从QPolygonF作为QList项的Qt / C ++继承

来自分类Dev

Qt C ++如何使用QList <> :: const_iterator?

来自分类Dev

从QML访问QList时QT / QML c ++程序崩溃

来自分类Dev

如何在Qt中对QList <QVariant>进行排序?

来自分类Dev

Qt QMap和QList速度

来自分类Dev

Qt QMap和QList速度

来自分类Dev

Delphi到Qt / C ++:tmemorystream

来自分类Dev

C ++ / Qt项目的跨平台编译

来自分类Dev

继承C ++ Qt项目的问题

来自分类Dev

Qt 5中的QList <T> :: at:ASSERT失败:“索引超出范围”

来自分类Dev

如何在Qt 6中将QList转换为QSet

来自分类Dev

Qt 5中的QList <T> :: at:ASSERT失败:“索引超出范围”

来自分类Dev

不能将self.size用于用Objective-C编写但导入到swift项目的UIView子类?

来自分类Dev

如何创建QList的深层副本(Qt 4.8)

来自分类Dev

QT / Javascript Bridge:通过Qlist <QVariantMap>?

来自分类Dev

Qt QList不追加本地对象

来自分类Dev

QList<T>::operator[] 中的断言失败:“索引超出范围”文件 /usr/include/arm-linux-gnueabihf/qt5/QtCore/qlist.h

来自分类Dev

QList中QPushButton的坐标

来自分类Dev

QList <QString>到QString.arg()

来自分类Dev

C ++ / Qt项目的连接功能中不存在插槽?(已经重新制作)

来自分类Dev

Qt C ++ QString到QByteArray的转换

来自分类Dev

从QJsonValue到QByteArray的Qt C ++转换

来自分类Dev

我无法删除QList <QByteArray *>中的项目

来自分类Dev

将QNX Qt库集成到Qt项目中

来自分类Dev

QT Windows到Android的必需项目更改