2016-06-15 61 views
0

我正在構建一個簡單的小部件,它將從lineEdit獲取輸入,並將其作爲新行(假設該條目不在那裏)添加到QTableWidget中。我一直遇到的問題是文本不會顯示在tablewidget中,儘管行顯示爲空。QTableWidget不顯示文本

相關代碼:

在構造函數中:

rowCounter = 0; 
ui->flagTable->setColumnCount(1); 
ui->flagTable->horizontalHeader()->hide(); 
ui->flagTable->verticalHeader()->hide(); 
ui->flagTable->setColumnWidth(0,148); 
QString commandInput = ui->flagInput->text(); 

在on_flagInput_returnPressed():

QString commandInput = ui->flagInput->text(); 
if (ui->flagTable->findItems(commandInput, Qt::MatchFixedString).isEmpty()) 
{ 
    rowCounter++; 
    ui->flagTable->setRowCount(rowCounter); 
    ui->flagTable->setItem(rowCounter, 0, new QTableWidgetItem(commandInput)); 

}

^這是在代碼中。

+0

您有內存泄漏,如'commandItem'是永遠使用或刪除。也許你打算使用它而不是'新的QTableWidgetItem(commandInput)'?另外,爲什麼你將它設置在第1列,而你的flagTable只有1列?這不應該是0嗎? –

+0

@JeffreyvandeGlind這是從以前的嘗試遺留下來的。重新格式化,同樣的錯誤仍然存​​在 –

+0

您還在'rowCount()',而不是'rowCount() - 1'上設置項目。添加新的唯一輸入時是否看到以前的輸入? –

回答

0

想通了!

初始化rowCounter的值爲零,所以它始終將項目設置爲尚未初始化的行!

這裏的工作版本,如果有人遇到同樣的問題:

構造:

rowCounter = 1; 
ui->flagTable->setColumnCount(1); 
ui->flagTable->horizontalHeader()->hide(); 
ui->flagTable->verticalHeader()->hide(); 
ui->flagTable->setColumnWidth(0,148); 

on_flagInput_returnPressed():

QString commandInput = ui->flagInput->text(); 
if (ui->flagTable->findItems(commandInput, Qt::MatchFixedString).isEmpty()) 
{ 
    QTableWidgetItem *commandItem = new QTableWidgetItem(commandInput, 1); 
    ui->flagTable->setRowCount(rowCounter); 
    ui->flagTable->setItem(rowCounter-1, 0, commandItem); 
    rowCounter++; 
}