在构造函数中迭代 QTableWidget 单元格?

Iterate over QTableWidget cells in constructor?

我想从它的构造函数中设置一个 QTableWidget 的子类 read-only 但我找不到一种方法来将标志放在所有项目上,并且显示的代码不起作用,因为 columnCount 和 rowCount 是在构造函数中调用,因此返回 0.

for (int i=0;i<this->columnCount();i++) {
    for (int j=0;j<this->rowCount();j++) {
        this->item(i,j)->setFlags(Qt::ItemFlag::NoItemFlags);
    }
}

由于 headers 是通过 Qt Designer 使用双击表单初始化的,我没有办法从代码中知道 column/row 计数(除非通过硬编码,但我想避免这种情况),我找不到任何方法将标志应用于所有项目。

我也看到了一些 workarounds working on the modification event itself to prevent data modification,但我也希望避免这种情况。

有没有办法正确设置这些标志,或者我是否必须去掉 Qt Designer 部分才能在构造函数中添加所有 header 初始化?

由于您的 QTableView 是在自动生成的 setupUi() 中填充的(首先创建小部件,然后添加项目),您可以向子类添加一个像 setReadOnly(bool) 这样的方法(我想Designer 中的小部件被提升为)并在 setupUi() 之后显式调用它。甚至会更加灵活,从那时起您也可以将此子类与非只读表一起使用。

嘿,这解决了你的问题...

for (int i=0;i< ui->tableWidget->rowCount();i++) {
        for (int j=0;j< ui->tableWidget->columnCount();j++) {
            QTableWidgetItem *item =  ui->tableWidget->item(i,j);
            item->setFlags(Qt::NoItemFlags);
        }
    }

只需尝试一下,您就可以轻松找出代码中的问题... rowCount() 和 coloumnCount() api 应该正确对齐,它的 item() API 不是 itemAT().. 请检查。