【问题标题】:writing strings in qtable items在 qtable 项目中写入字符串
【发布时间】:2013-06-25 07:19:25
【问题描述】:

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

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

【问题讨论】:

    标签: qt qtablewidget qstring qtablewidgetitem


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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      相关资源
      最近更新 更多