Qt分段故障QTableWidget-> SetItem(int,int,QTableWidgetItem)

时间:2015-03-02 21:39:39

标签: c++ qt segmentation-fault qt-creator qtablewidget

固定

我正在编写一个程序,用于加载一个包含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-&gt; setItem(k,l,tempitem)的分段错误,应用程序也崩溃了。

有没有人有任何指针(:])来帮助我?

PS:

当不使用颜色部分时也会发生这种情况,因此注释setBackgroundColor行(我知道它已被弃用,但它适用于不同的项目)不会改变任何东西。

FIX

QTableWidget是在本地分配的,不在additem可以访问的范围内。将表格定义得更高是修复。

2 个答案:

答案 0 :(得分:0)

QTableWidgetItem* tempitem = new QTableWidgetItem();

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

QTableWidgetItem* tempitem = new QTableWidgetItem(mapTableWidget);

答案 1 :(得分:0)

我的代码中的这个问题是因为cellChanged SLOT中的逻辑而发生的。我试图在QTableWidget中设置尚未实际创建的文本。