在类中构造新变量使程序崩溃

时间:2015-06-10 15:02:45

标签: c++ qt

大家好开始:

C ++中的编码

使用QT Creator版本5.4.1

当我开始用一些成员变量构建新类时,我的程序出现问题,我的程序崩溃了。我已经尝试在标题中,在类构造函数中为它们赋值,并且在类初始化中也没有帮助。这些是我认为导致问题的原因:

该类称为WfsFeatureViewer使用头文件和Qt Ui文件。 Ui在建设时初始化。

std::vector<CustomLineItem*> m_line_items;
std::vector<CustomPointItem*> m_point_items;
std::vector<CustomPolygonItem*> m_polygon_items;

它们是简单的Polygon / Line / Point项目,它们是QGraphicsPolygonItem,PointItem和行项目的子类。他们没什么。如果我将这些人排除在我的班级之外它不会崩溃(但重要的是它们是这个班级的成员变量)

我想知道我创造课程的速度是否达到了?通常我会得到大约5-60个并且它崩溃了。 WfsFeatureViewer类被添加到QListWidgetView。因此,使用循环会创建一堆循环供用户查看。这是它的外观:

// I used for index to pass the the WfsFeatureViewer
int i = 0;

// Loop for all the WFS Feature names and elements
for(auto feature_itr : m_layer_elements)
{
    // Increment I per loop
    i++;

    // Create a new WfsFeatureViewer
    auto wfs_viewer(new WfsFeatureViewer());

    QObject::connect(wfs_viewer,&WfsFeatureViewer::sendNewShps,this,&DialogWfsReader::catchNewShps);

    //Set some UI data and base WFS for later reading.
    wfs_viewer->setElementAndName(feature_itr.first,feature_itr.second);
    wfs_viewer->setIndex(i);
    wfs_viewer->setWfsBaseURL(m_ui->m_line_wfs_name->text().toStdString());

    // Loop to get the layer count for this wfsViewer
    for(auto layer_itr : m_layer_count)
    {
        // check if its the correct name
        if(layer_itr.first == feature_itr.first)
        {
            // Set the layer count
            wfs_viewer->setLayerCount(layer_itr.second);
        }
    }
    // loop to get the shape type
    for(auto shp_itr : m_layer_shp_type)
    {
        // check if its the correct name
        if(shp_itr.first == feature_itr.first)
        {
            // set the shape type
            wfs_viewer->setShapeType(shp_itr.second);
        }
    }

    // Create a new QListWidgetItem
    QListWidgetItem* item(new QListWidgetItem);

    // Add it to the QListWidget
    m_ui->m_list_layers->addItem(item);

    // Set the wfs_viewer onto the item
    m_ui->m_list_layers->setItemWidget(item,wfs_viewer);

    // Give it a size
    item->setSizeHint(QSize(100,210));

    // And adjust the UI
    wfs_viewer->adjustSize();
}

所以这可以循环很多次,意味着很多新对象被创建,如果我加载大约70-100个类,那么大约是10-30MB的ram。

我不太清楚是什么造成这种情况,我也没有收到堆错误,所以我知道我没有杀死堆。

1 个答案:

答案 0 :(得分:0)

好的,我现在似乎已修复它,在创建新类时停止崩溃一次。完整的Clean,QMake和rebuild解决了这个问题。不太确定导致它的原因。但是如果我找到适合这个解决方案的答案的话,它现在就会在这里发布一些内容。