1

我在 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 exited with code -1073741819

这段代码有什么问题?!(如果我删除最后一行其他部分工作,问题就在这里,但我不知道是什么)

4

1 回答 1

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 );

您应该始终检查ui->tableWidget->item(i,j) 是否正在返回某些内容。

来自文档:

QTableWidgetItem * QTableWidget::item(int row, int column) const 如果已设置,则返回给定行和列的项目; 否则返回 0

访问空指针会使程序崩溃..

一些观察:

  • 有一个QTableWidgetItem * TableWidget::currentItem() const 方法。它可能有用,比获取当前行和列更好。但是检查它返回的内容!

  • 在表中设置一个项目会将该项目的所有权授予该表,这意味着,您不必保留该指针数组,表将在不需要时负责删除该项目

于 2013-06-25T07:43:23.147 回答