想使用QTreewidget也像qt designer那里一样,做个属性编辑器
单纯设置
fontBoldItem->setCheckState(1,Qt::Unchecked);
运行时只有点击 复选框才能修改 checkbox的选中状态
但是qt designer就不是这个样子,无论单击复选框或者item其它位置都可以修改checkbox的选中状态
我跟踪了一下,mousePressEvent和mouseReleaseEvent,单击复选框和item其他位置,区别主要在于pos位置
所以一个比较偷懒的想法就是在这两个事件中的修改event的pos位置,修正为复选框的所在位置范围内,经测试没有问题。
但是这种做法总感觉不地道,也有点名不正言不顺。
鉴于一般的qtreewidget的文本框和下拉框、微调框都是使用的itemwidget
所以也想到了这个,那就在其上放置个QCheckbox吧,
简单测试一下不行,只有点击复选框才会变化,后来想到的是设置文本,应该是文本长度决定QCheckbox的长度吧
果不其然,但是有不想让人看见文本,干脆将文本都有空格或者\t替换,结果很ok
在此更深刻理解,最简单的才是最有效的
就如上次QLineEdit的那样,开始我想的是在label上放置QLineEdit和QLabel,QLabel上放图片,而没有想到使用QLineEdit,直接在其上放置图片,这就涉及到很严重的问题,我想设置QLineEdit的样式时,每次都得通过外层的QLabel实现,即要重载外层Qlabel的所有样式方法,在其中调用QLineEdit的样式方法(因为在对外部而言,只有外层的Qlabel是可见的,不想也不情愿将内部的QLineEdit开放,这样总感觉,不像是一个独立的部件)
其实使用QCheckbox也是刚才想起来并测试成功的,昨天晚上想写,但是网速不给力,没有发表成功,昨天的版本就不是这样的
而是 在QLabel上放一个QCheckbox,其实跟最初版本LineEdit的编辑是同样的思路,同样的错误,如果那样的话,还要对点击QCheckbox或者QLabel的其他地方,区别处理,他们之间的关联,check状态的统一等等。
再次 验证 :最简单的才是最有效的! I believe