为什么我不能从QTableWidget单元格中获取文本?

时间:2014-04-19 20:36:52

标签: qt cell qtablewidget

我搜索了答案,ui->tableWidget->item( row, col )->text();似乎就是答案。 现在,在我的代码中,我有:

ui-> tableWidget->setItem(row-1, 1, new QTableWidgetItem("clicked"));

这很好用。单击单元格时,它会显示"单击"信息。但是,当我在下面添加:

QString str;
QTableWidgetItem * itm = ui->tableWidget->item( 3, 1 );
str = itm->text();

程序崩溃了。 任何想法如何从单元格中查看文本?

所有code.Constructor:

{
    ui->setupUi(this);


    QDate date = QDate::currentDate();
    QString dateString = date.toString();

    QFont myFont;
    QFontMetrics font_meter(myFont);
    int line_width=0;

    ui->label->setText(dateString);

    QFile file(":/input.txt");

    if(!file.open(QIODevice::ReadOnly))
    {
        QMessageBox::information(0,"info",file.errorString());
    }

    QTextStream in(&file);
    QStringList headerLabels;
    QStringList rowLabels;
    QStringList rowContents;


    headerLabels << "Tasks to do" ;

    int row_count=0;

    while (true)
    {
        QString line = in.readLine();

        if (line.isNull())
        {
          file.close();
          break;
        }
        else
        {
            row_count++;
            rowLabels.append(QString("%1").arg(row_count));
            rowContents.append(line);
            if( font_meter.width(line)>line_width)
            {
                line_width=font_meter.width(line);
            }
        }

    }


   ui->tableWidget->setRowCount(row_count);
   ui->tableWidget->setVerticalHeaderLabels(rowLabels);
   ui->tableWidget->setColumnCount(1);

  // ui->tableWidget->setCellWidget();

  for(int i=0;i<row_count;i++)
  {
      ui-> tableWidget->setItem(i-1, 1, new QTableWidgetItem(rowContents.at(i)));


  }


}

void MainWindow::on_tableWidget_cellDoubleClicked(int row, int column)
{

    ui->pushButton->setText( QString("%1").arg(row));

    ui-> tableWidget->setItem(row-1, 1, new QTableWidgetItem("clicked"));

    QString str;
    QTableWidgetItem * itm = ui->tableWidget->item( 3, 1 );
    str = itm->text();


}

我试图制作另一个程序。只需要一个简单的表格并从单元格中取出文本:

ui->setupUi(this);

    ui->tableWidget->setItem(1,1,new QTableWidgetItem("lol"));

    QString str= ui->tableWidget->item(1,1)->text();

。完全相同的错误

1 个答案:

答案 0 :(得分:2)

ui->setupUi(this);
ui->tableWidget->setRowCount(1);
ui->tableWidget->setColumnCount(1);
ui->tableWidget->setItem(0, 0, new QTableWidgetItem("Hello World!"));
QTableWidgetItem *temp = ui->tableWidget->item(0, 0);
QString str = temp->text();

对我有用,当rowCount或columntCount为0 时,我只能崩溃程序。