已修复
我正在编写一个程序来加载一个包含 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) 处遇到段错误,应用程序也在那个时候崩溃。
有没有人有任何指示 (:]) 来帮助我解决这个问题?
附言:
当不使用颜色部分时也会发生这种情况,因此注释掉 setBackgroundColor 行(我知道它已被弃用,但它适用于不同的项目)不会改变任何东西。
修复
QTableWidget 是在本地分配的,超出了 additem 可以访问的范围。将 table 定义得更高是解决办法。
最佳答案
QTableWidgetItem* tempitem = new QTableWidgetItem();
尝试为对象添加一个父对象, 例如:
QTableWidgetItem* tempitem = new QTableWidgetItem(mapTableWidget);
关于c++ - Qt Segmentation Fault QTableWidget->SetItem(int,int,QTableWidgetItem),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28819920/