我正在尝试从我的程序导出的文件中填充QTableWidget,但是当我尝试将文本设置为表格单元格时,他们只是忽略了我,没有任何反应。
void MainWindow::on_actionOpen_Project_triggered()
{
QString line, fileName;
fileName = QFileDialog::getOpenFileName(this,tr("Open Project"), "", tr("Project Files (*.project)"));
if(!fileName.isEmpty()){
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;
QTextStream in(&file);
for(int i=0;i<ui->code->rowCount();i++){ // goes through table rows
for(int j=0;j<ui->code->columnCount();j++){ // through table columns
ui->code->setCurrentCell(i,j);
QTableWidgetItem *cell = ui->code->currentItem();
in >> line;
if(!line.isEmpty()){
cell = new QTableWidgetItem(line); // relates the pointer to a new object, because the table is empty.
ui->errorlog->append(line); // just for checking if the string is correct visually.
}
}
}
file.close();
}
}
错误日志对象在屏幕上显示从文件打开的正确值,但表未填充。发现任何问题?
答案 0 :(得分:0)
这一行:
cell = new QTableWidgetItem(line);
不符合您的想法。分配cell
不会改变表中的任何内容 - cell
只是一个局部变量,覆盖它在其他地方没有任何影响。
你(可能)想要做这样的事情:
cell->setText(line);
或者(如果你真的不需要改变当前项目):
ui->code->item(i,j)->setText(line);
如果那些给你一个段错误,那就是你还没有设置表的小部件项。在这种情况下,您应该执行以下操作:
QTableWidgetItem *cell = ui->code->item(i,j);
if (!cell) {
cell = new QTableWidgetItem;
ui->code->setItem(i,j,cell);
}
if (!line.isEmpty()) {
cell->setText(line);
}
这将在第一次调用此函数时使用QTableWidgetItem
填充所有单元格,并随后重复使用它们。