复现场景
Qt版本 5.9.8
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->tableWidget->setRowCount(1);
ui->tableWidget->setColumnCount(2);
QLineEdit *lineEdit = new QLineEdit(this);
ui->tableWidget->setCellWidget(0, 1, lineEdit);
}
Widget::~Widget()
{
delete ui;
}
选中第一个item,在中文输入法下随便点击一个字母键,程序崩溃,在debug模式下显示的是函数调用栈溢出。如图
解决方案
这个bug实际上也有人提交到了Qt官方收集bug的地方 QTableWidgetItem cause stack overflow。但是好像没有引起关注 🤣。所有推荐 将原本使用 setCellWidget 的地方使用代理来实现效果 或者 QtableWidget的每一个项都使用 setCellWidget。