我想从它的构造函数中设置一个QTableWidget的子类只读,但我找不到将标志放在所有项上的方法,并且由于在构造函数中调用了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);
}
}
由于标题是通过Qt Designer使用双击形式初始化的,我没有办法从代码中知道列/行数(除了通过硬编码,但我想避免这种情况),我找不到任何方法将标志应用于所有项目。
我也看过一些workarounds working on the modification event itself to prevent data modification,但我也希望避免这样做。
有没有办法正确设置这些标志,还是我必须摆脱Qt Designer部分才能在构造函数中添加所有标头初始化?
答案 0 :(得分:4)
嘿,这解决了你的问题...
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()..请检查。
答案 1 :(得分:0)
由于您的QTableView正在自动生成的setupUi()
中填充(创建了第一个小部件,然后添加了项目),您可以向您的子类添加setReadOnly(bool)
之类的方法(我想这个小部件在Designer中被提升为)并在setupUi()
之后显式调用它。从那以后,您甚至可以更灵活地将此子类与非只读表一起使用。