0

我正在尝试从我的程序导出的文件中填充 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();
    }
}

错误日志对象在屏幕上显示从文件中打开的正确值,但表格未填满。有没有发现什么问题?

4

1 回答 1

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这将在第一次调用此函数时用 s 填充所有单元格,并随后重用它们。

于 2012-05-04T17:36:27.927 回答