我在qtable项目中编写字符串时遇到问题 我已经创建了一个表并在其中设置了项目,我想从用户(通过lineEdit)获取字符串,然后将它们写入选定的项目。这是我的代码:
QTableWidgetItem *item[10][10];
.
.
.
for(int i=0; i<10; i++)
for(int j=0; j<10; j++){
item[i][j] = new QTableWidgetItem;
item[i][j]->setText(0);
ui->tableWidget->setItem(i, j, item[i][j]);}
.
.
.
int j = ui->tableWidget->currentColumn();
int i = ui->tableWidget->currentRow();
QString str = ui->formulaLineEdit->text();
ui->tableWidget->item(i,j)->setText( str );
然后它对我说:project.exe退出,代码为-1073741819
这段代码出了什么问题?! (如果我删除最后一行其他部分工作,问题在这里,但我不知道是什么)
答案 0 :(得分:1)
设置行数和列数:
void setRowCount(int rows)
void setColumnCount(int columns)
(编辑:你必须在setItems之前设置它,否则它将默默地做什么)
ui->tableWidget->setRowCount(10);
ui->tableWidget->setColumnCount(10);
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
{
ui->tableWidget->setItem( i, j, new QTableWidgetItem() );
}
}
.
.
QString str = ui->formulaLineEdit->text();
// Get the item this way
int j = ui->tableWidget->currentColumn();
int i = ui->tableWidget->currentRow();
QTableWidgetItem *my_item = ui->tableWidget->item(i,j);
// Or
QTableWidgetItem *my_item = ui->tableWidget->currentItem();
// Check it's not 0!!!
if (my_item)
my_item->setText( str );
您应始终检查,即表格小部件&gt;项目(i,j)正在返回内容。
来自docs:
QTableWidgetItem * QTableWidget :: item(int row,int column)const 返回给定行和列的项(如果已设置); 否则返回0 。
访问空指针会导致程序崩溃..
一些观察结果:
Theres a QTableWidgetItem * TableWidget::currentItem() const 方法。它可能有用,比获得当前行更好 柱。但请检查它返回的内容!
在表格中设置项目会将该项目的所有权提供给表格, 这意味着,你不必保留那个指针数组,表格会 在不需要时负责删除项目