在qtable项目中写字符串

时间:2013-06-25 07:19:26

标签: qt qtablewidget qstring qtablewidgetitem

我在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

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

1 个答案:

答案 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 方法。它可能有用,比获得当前行更好 柱。但请检查它返回的内容!

  • 在表格中设置项目会将该项目的所有权提供给表格, 这意味着,你不必保留那个指针数组,表格会 在不需要时负责删除项目