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

标签 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->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/

相关文章:

c++ - 重载运算符拼图 : return *this, 还是临时变量?

Qt 样式表 - 同一类型小部件的不同样式

ios - 运行 Swift 应用时出现 Segmentation Fault 11

c++ - 链接 c/c++ 的问题

c++ - wxWidgets 和 VC++

c++ - 在增量循环的情况下如何使用 SSE?

c++ - QtScript——通过 C++ 端实现的脚本端回调

c++ - 如果我再次调用 QProcess::start() 会发生什么?

c++ - 插入 int 集合时崩溃

c - 段错误: C-Program migrating from HPUX to Linux