Qt Segmentation Fault QTableWidget->SetItem(int,int,QTableWidgetItem)

Qt Segmentation Fault QTableWidget->SetItem(int,int,QTableWidgetItem)

本文关键字:int QTableWidgetItem SetItem Fault Segmentation QTableWidget- gt Qt      更新时间:2023-10-16

固定

我正在编写一个程序,该程序加载一个包含400个字符的文件,并根据字符更改加载时表单元格的背景颜色。

这就是我创建QTableWidget:的方式

QTableWidget* mapTableWidget = new QTableWidget(this);
mapTableWidget->setRowCount(20);
mapTableWidget->setColumnCount(20);
for (int i = 0; i<20; i++)
{
    mapTableWidget->setRowHeight(i,24);
    mapTableWidget->setColumnWidth(i,24);
}
mapTableWidget->setShowGrid(false);
mapTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
mapTableWidget->setSortingEnabled(false);

我用一个简单的将小部件添加到当前布局中

QVBoxLayout* layout = new QVBoxLayout;
layout->setMargin(5);
layout->addWidget(mapTableWidget);

这就是问题所在:

for (int k=0; k<20; k++)
{
    for(int l=0; l<20; l++)
    {
        QTableWidgetItem* tempitem = new QTableWidgetItem();
        tempitem->setBackgroundColor(mb->colorAt(l,k));
        mapTableWidget->setItem(k,l,tempitem);
    }
}

我遇到的问题是,在调试时,我在mapTableWidget->setItem(k,l,tempitem)处不断遇到分段错误,应用程序在这一点上也崩溃了。

有人能在这里帮我吗?

PS:

在不使用颜色部分时也会发生这种情况,因此对setBackgroundColor行进行注释(我知道它不推荐使用,但它在不同的项目中起作用)不会改变任何事情。

FIX

QTableWidget是在本地分配的,不在插件可以访问的范围内。将表定义得更高是解决问题的方法。

QTableWidgetItem* tempitem = new QTableWidgetItem();

尝试向对象添加父对象,例如:

QTableWidgetItem* tempitem = new QTableWidgetItem(mapTableWidget);

我的代码中出现这个问题是因为cellChanged SLOT中的逻辑。我试图在QTableWidget中设置文本,但它还没有真正创建。