QTreewidget的 item Checked 编辑

来源:互联网 发布:应用数学知乎 编辑:程序博客网 时间:2024/06/07 09:33


想使用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

原创粉丝点击