2014-04-19 55 views
1

我已經搜索了答案,並且ui->tableWidget->item(row, col)->text();似乎是答案。 現在,在我的代碼有:爲什麼我無法從QTableWidget單元中獲取文本?

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


} 

我曾試圖彌補另一個program.Just用一個簡單的表,獲取文本從細胞:

ui->setupUi(this); 

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

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

。完全相同的錯誤

+0

能否請您分享更多的代碼和回溯初學者? – lpapp

+0

你確定'ui-> tableWidget-> item(...)'返回有效的項目嗎?如果在指定的行和列上沒有項目,它將返回0。在空項目上調用'itm-> text()'會導致段錯誤。 –

回答

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時程序崩潰。

相關問題