固定
我正在编写一个程序,该程序加载一个包含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中设置文本,但它还没有真正创建。