禁用编辑并将项目设置为QTableWidget中的多行

禁用编辑并将项目设置为QTableWidget中的多行,qt,qtableview,qtablewidget,Qt,Qtableview,Qtablewidget,|姓名|数学|物理|平均成绩| | | | | || | | | || | | | || | | | || | | | | | | | | “数学”和“物理”一栏供用户输入数字,“平均值”一栏不能输入值,仅用于显示用户输入“数学”和“物理”分数后的平均值。如何禁用编辑但仍在“average”列中显示计算值 我想将内容写入几行,但我的代码不起作用 ui->tableWidget->setColumnCount(4); ui->tableWidget->setRowCount

|姓名|数学|物理|平均成绩|

<代码>| | | |
|| | | |

|| | | |

|| | | |

|| | | |

| | | | |

  • “数学”和“物理”一栏供用户输入数字,“平均值”一栏不能输入值,仅用于显示用户输入“数学”和“物理”分数后的平均值。如何禁用编辑但仍在“average”列中显示计算值

  • 我想将内容写入几行,但我的代码不起作用

    ui->tableWidget->setColumnCount(4);
    ui->tableWidget->setRowCount(8);
    ui->tableWidget->setSortingEnabled(false);
    QTableWidgetItem *newItem = new QTableWidgetItem(tr("Hello World"));
    for (int i=0; i< ui->tableWidget->rowCount(); i++)
        ui->tableWidget->setItem(i, 0, newItem);
    
    我还是不明白,因为我是QT的新手。请帮帮我,非常感谢!:)

    代码更新:

    for (int i = 0; i < ui.tableWidget->rowCount(); i++) {
        QTableWidgetItem *icon_item = new QTableWidgetItem;
        QIcon icon(":/myproject/icon/test.png");
        icon_item->setIcon(icon);
        ui.tableWidget->setItem(i, 0, icon_item);
    }
    
    for (int j = 0; j < ui.tableWidget->rowCount(); j++) {
        ui.tableWidget->item(j, 3)->setFlags(ui.tableWidget->item(j, 3)->flags() & ~Qt::ItemIsEditable);
    }
    
    for(int i=0;irowCount();i++){
    QTableWidgetItem*图标\项目=新的QTableWidgetItem;
    QIcon图标(:/myproject/icon/test.png”);
    图标\项目->设置图标(图标);
    ui.tableWidget->setItem(i,0,图标\u项);
    }
    对于(int j=0;jrowCount();j++){
    ui.tableWidget->item(j,3)->setFlags(ui.tableWidget->item(j,3)->flags()&~Qt::ItemIsEditable);
    }
    
  • 你可以用。要保留其他默认标志,但删除
    Qt::ItemIsEditable

    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
    
  • 不能将同一个
    QTableWidgetItem
    实例设置为多个单元格。要开始,请执行以下操作:

    for (...) {
        QTableWidgetItem *item = new QTableWidgetItem(...);
        tableWidget->setItem(...);
    }
    
  • 你可以用。要保留其他默认标志,但删除
    Qt::ItemIsEditable

    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
    
  • 不能将同一个
    QTableWidgetItem
    实例设置为多个单元格。要开始,请执行以下操作:

    for (...) {
        QTableWidgetItem *item = new QTableWidgetItem(...);
        tableWidget->setItem(...);
    }
    

  • 谢谢。你的第二个解决方案对我很有效。但是,第一个不起作用,因为我有访问冲突。我的代码是
    for(inti=0;irowCount();i++){ui.tablewidget->item(i,3)->setFlags(ui.tablewidget->item(i,3)->flags()&~Qt::ItemIsEditable);}
    当我调试时,当我运行到4时,我有访问冲突:(那么你可能是在取消引用一个空指针,因为没有调用setItem()对于那个单元格/列。那么我应该怎么做来避免这个问题呢?(对不起,我是新手)在没有看到代码的情况下,我只能猜测您可能为每一行创建了一个项目,并调用了
    ui.tablewidget->setItem(i,0,someItem);
    ,但忘记了为其他列创建项目,而调用了
    ui.tablewidget->setItem)(一、三、其他项目)
    ,例如。哎哟,你说得对。我在上面的问题中更新了我的代码。实际上我想在列0的名称旁边创建一个小图标,所以我只在列0中插入图标。列1和列2不应该包含图标,它应该仅用于值,因此我没有为此创建任何项目。列3仅用于显示,因此,我按照您的建议编写了代码。那么如何改进代码以避免指针问题呢?非常感谢。您的第二个解决方案对我来说效果很好。但是,第一个解决方案不起作用,因为我有访问冲突。我的代码是(
    for)(int i=0;irowCount();i++){ui.tablewidget->item(i,3)->setFlags(ui.tablewidget->item(i,3)->flags()&~Qt::ItemIsEditable);}
    当我调试时,当我运行到4时,我有访问冲突:(那么你可能正在取消引用一个空指针,因为没有为该单元格/列调用setItem()。那么我应该怎么做来避免这个问题?(对不起,我是新手)在没有看到代码的情况下,我只能猜测您可能为每行创建了一个项目,并调用了
    ui.tablewidget->setItem(I,0,someItem);
    ,但忘记了为其他列创建项目,并调用
    ui.tablewidget->setItem(I,3,otherItem)
    ,例如。哎哟,你说得对。我在上面的问题中更新了我的代码。实际上我想在列0的名称旁边创建一个小图标,所以我只在列0中插入图标。列1和列2不应该包含图标,它应该仅用于值,因此我没有为此创建任何项目。列3仅用于显示,所以我按照你们的建议编写代码。那个么我如何改进我的代码以避免指针的问题呢?