2016-06-15 42 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++; 
}