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:

Constant

Value

Description

Qt::NoItemFlags

0

It does not have any properties set.

Qt::ItemIsSelectable

1

It can be selected.

Qt::ItemIsEditable

2

It can be edited.

Qt::ItemIsDragEnabled

4

It can be dragged.

Qt::ItemIsDropEnabled

8

It can be used as a drop target.

Qt::ItemIsUserCheckable

16

It can be checked or unchecked by the user.

Qt::ItemIsEnabled

32

The user can interact with the item.

Qt::ItemIsAutoTristate

64

The item's state depends on the state of its children. This enables automatic management of the state of parent items in QTreeWidget (checked if all children are checked, unchecked if all children are unchecked, or partially checked if only some children are checked).

Qt::ItemIsTristate

ItemIsAutoTristate

This enum value is deprecated. Use Qt::ItemIsAutoTristate instead.

Qt::ItemNeverHasChildren

128

The item never has child items. This is used for optimization purposes only.

Qt::ItemIsUserTristate

256

The user can cycle through three separate states. This value was added in Qt 5.5.

这是枚举类型,列出了很多值。再用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)

不难发现,默认的设置如果转成二进制值为0 0011 1111(十进制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需要显式设置,应该是建议我们根据需要自己设置。

QTableWidget设置Item不可编辑状态相关推荐

  1. easyui textbox 设置只读不可编辑状态

    在使用easyul的时候,发现输入框内容及不容易获取与设置,用jQuery的方式大部分失效.依稀记得好像是因为easyul会在原页面的基础上,生成了一些新的独有样式,并且暂时覆盖掉使用了easyul的 ...

  2. js设置html不可编辑状态,JS_设置弹出页面的地址栏不可编辑

    JS_如何设置弹出页面的外观,地址栏不可编辑:如下所示: 参数解释: window.open 弹出新窗口的命令: 'page.html' 弹出窗口的文件名: 'newwindow' 弹出窗口的名字(不 ...

  3. Qt LineEdit设置为不可编辑状态:

    QLineEdit *lEdit = new QLineEdit(): lEdi -> setReadOnly(true); //只读 或者 lEdi ->setEnabled(False ...

  4. 设置ALV单元格可编辑状态

    在使用ALV显示列表的过程中,我们可以使用IT_FIELDCAT参数设置某一个字段的可编辑状态.但是,要设置具体的单元格的可编辑状态对于对ALV不是很了解的人来说是一个头大的问题. 具体单元格可编辑状 ...

  5. jqgrid 批量启动所有行为可编辑状态

    有时,为操作方便,需要将jqgrid表格设置为一直处于编辑状态,用户只需要在对应的编辑区填写自己信息,不再频繁的去触发行编辑和保存. 参考代码如下: //$gridCase为传入jqgrid对象 fu ...

  6. EditText设置可以编辑和不可编辑状态

    1.首先想到在xml中设置android:editable="false",但是如果想在代码中动态设置可编辑状态,没有找到对应的函数 2.然后尝试使用editText.setFoc ...

  7. Qtablewidget设置某一列不可编辑

    设置Qtablewidget第一列不可编辑,第二列不可编辑.试了很多方式才实现,记录一下,以免忘记 def InsertTableWidget(self,column1,column2):rowcou ...

  8. android设置EditText为不可编辑状态

    最近做一个项目,需要动态设置EditText为不可编辑状态,根据某些条件判断,设置EditText为可编辑状态: eidtext.setFocusableInTouchMode(false);//不可 ...

  9. QTableWidget设置表头筛选(含鼠标点击事件过滤)

    QtableWidget设置表头点击事件,显示筛选框,实现类似excel的表头筛选功能: 通过重写eventFilter事件过滤方法,获取鼠标点击的事件(含点击表格的空白处) 效果图 Widget.h ...

  10. dateTimePicker编辑状态下,取值不正确的问题

    当对dateTimePicker进行编辑,回车,调用函数处理dateTimePicker的value值时,其取值结果是你编辑之前的值,而不是你编辑后的值,虽然dateTimePicker.text的值 ...

最新文章

  1. Python图片处理PIL/pillow/生成验证码/出现KeyError: 和The _imagingft C module is not installed...
  2. Linux IO模型漫谈(6)- 信号驱动IO模型
  3. C# .net 命名规范
  4. 那些年我们踩到过的坑(二):3.1 版 MultiThreadedHttpConnectionManager 未releaseConnection导致应用服务器宕机...
  5. redis安装(windows)
  6. hexo 修改yelee文章标题字体颜色
  7. window 之命令行的cd
  8. oracle 增加一个新分区,oracle 11g 新增分区
  9. linux下线程控制
  10. [Reinforcement Learning] 动态规划(Planning)
  11. Python升级包不成功,试试豆瓣资源吧
  12. 基于JAVA的私人牙科诊所管理系统
  13. 微信小程序的基础实现
  14. 群晖nas服务器的虚拟机,群晖NAS用于虚拟化的存储
  15. Java——线程回顾汇总:同步/生产者消费者模式/定时调度
  16. ensp路由器MTU设置1200后,ping不通丢包问题
  17. 莫队算法 --算法竞赛专题解析(26)
  18. Java项目:医疗管理系统 (java+Springboot+Maven+Mybatis-plus+Vue+Mysql)
  19. 2、金融量化分析简介
  20. 华为智慧屏 SE55

热门文章

  1. PostgresSQL 使用实践
  2. 统计字符串中英文字符出现个数--C语言
  3. 英特尔cpu发布时间表_英特尔10代桌面cpu上市时间(英特尔10代发售时间)
  4. 无法连接阿里云 Windows 实例远程桌面
  5. 史上最全法则、效应大全,看一遍受用终身!
  6. Java DataStore 封装代码
  7. 微信公众号怎么放html文件,微信公众号html缓存处理
  8. 联想微型计算机设置从u盘启动,联想台式机设置从u盘启动图文教程
  9. 阿里云银行卡验证四要素
  10. 关于matlab运行的一些报错迷惑