100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > QTableWidget设置Item不可编辑状态

QTableWidget设置Item不可编辑状态

时间:2018-11-25 17:33:51

相关推荐

QTableWidget设置Item不可编辑状态

1. 背景

使用QTableWidget时想设置第一列不可编辑,而不是整个QTableWidgetItem不可编辑,遂查找资料,有些心得。

2. 设置方法

​给该列的每一个Item设置Flags,其实只要不是Qt::ItemIsSelectable,应该都可以做到不可编辑状态(没有一 一尝试)。

QTableWidgetItem *item0 = new QTableWidgetItem(QString::number(timeInterval));item0->setFlags(Qt::ItemIsEnabled);//此处是关键ui.tableWidget->setItem(row, 0, item0);

3. 进一步了解

在Qt Assitant中查看Qt::ItemFlags,结果如下:

enum Qt::ItemFlag

flags Qt::ItemFlags

This enum describes the properties of an item:

这是枚举类型,列出了很多值。再用qDebug()分别输出一下设置后的Flags和默认的Flags。

QTableWidgetItem *item1 = new QTableWidgetItem(QString::number(speedValue));qDebug()<< item0->flags();qDebug()<< item1->flags();

结果如下,默认的flags居然有6个。

QFlags<Qt::ItemFlag>(ItemIsEnabled)QFlags<Qt::ItemFlag>(ItemIsSelectable|ItemIsEditable|ItemIsDragEnabled|ItemIsDropEnabled|ItemIsUserCheckable|ItemIsEnabled)

不难发现,默认的设置如果转成二进制值为000111111(十进制63),而我们设置的为0 0010 0000(在表中不能被选中,那也肯定不能被用户编辑了)。所以下面两行代码等价:

item0->setFlags(Qt::ItemIsEnabled);item0->setFlags((Qt::ItemFlag)32);//使用数字描述flags

比如默认的设置是多个组合,我们就可以用63代替。写代码时可以根据选择,灵活使用数字,减少代码书写。

查看Qt助手时,还发现了

Note that checkable items need to be given both a suitable set of flags and an initial state, indicating whether the item is checked or not. This is handled automatically for model/view components, but needs to be explicitly set for instances of QListWidgetItem, QTableWidgetItem, and QTreeWidgetItem

.

说是QTableWidgetItem需要显式设置,应该是建议我们根据需要自己设置。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。