2017-10-19 158 views
1

我有QPushButton這個信號:QTWidgets QTableWidget的崩潰與段錯誤

void MainWindow::on_addNode_clicked() 
{ 
    ui->nodesTable->insertRow(ui->nodesTable->rowCount()); 
    if(ui->nodesTable->rowCount()>1) 
    { 
     ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text()); 
    } 
    else 
    { 
     ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(QString::fromStdString("0")); 
    } 
} 

但它與分段故障,每次當我點擊按鈕崩潰。據我瞭解,項目(...)給nullptr,但爲什麼?

回答

0

在您的表格中沒有任何項目時,如果指針指向非指向並且您想要觸及它,那麼您的應用程序會崩潰!

試試這個;

void MainWindow::on_addNode_clicked() 
{ 
    ui->nodesTable->insertRow(ui->nodesTable->rowCount()); 
    if(!ui->nodesTable->rowCount()) 
    { 
     ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text()); 
    } 
    else 
    { 
     ui->nodesTable->setItem(0, 0,new QTableWidgetItem(QString("New Item"))); 
    } 
} 
0

你要設置列數,你必須手動設置項:

ui->nodesTable->setColumnCount(1); 
ui->nodesTable->insertRow(ui->nodesTable->rowCount()); 
ui->nodesTable->setItem(ui->nodesTable->rowCount()-1, 0, new QTableWidgetItem("0")); 
if(ui->nodesTable->rowCount()>1) 
{ 
    ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text()); 
} 
else 
{ 
    ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(QString::fromStdString("0")); 
} 
+0

但是我在QTCreator的UI disigner中創建了列。如果它在那裏,我需要從另一行設置值。 – dimas

2

既然你沒有指定行,並與0行0列的QTableWidget開始列數,增加1行仍然留下0列。

另外,你必須首先創建通過setItem您的項目之前,你可以通過item

訪問它們,請看一看在文檔中overview

在另一方面:
在您if (ui->nodesTable->rowCount() > 1) rowCount() == 0else分支,因此您可以訪問ui->nodesTable->item(-1, 0)這是出界。