QTableView 的美化
更新时间:2023-09-18 07:55:01 阅读量: 幼儿教育 文档下载
- qtableview推荐度:
- 相关推荐
QTableView分成表头(Header)和表体(body)两部分。对于表头,我们需要做的不多,仅仅是换下背景色,去掉分节虚线,隐藏掉垂直表头。于是: 1 m_procssTableView->verticalHeader()->hide();
2 m_procssTableView->horizontalHeader()->setSectionsClickable(false);
3 m_procssTableView->horizontalHeader()->setStretchLastSection(true);
4 m_procssTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
5 m_procssTableView->setSelectionMode(QAbstractItemView::SingleSelection);
6 m_procssTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
7 m_procssTableView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
8 m_procssTableView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
9 m_procssTableView->setShowGrid(false); // disable the table grid.
10 m_procssTableView->verticalHeader()->setDefaultSectionSize(25); // set row height.
11 m_procssTableView->horizontalHeader()->setHighlightSections(false);
12 m_procssTableView->setFrameShape(QFrame::NoFrame); 13 m_procssTableView->setItemDelegate(new NoFocusFrameDelegate());
表体部分,我们需要去掉网格线,这样看起来更加简洁。一格格的被网格线分开反而觉得被束缚了。其他的就是一些常见的设置选项,不必多说。另外要注意的是,我们总可以看到即便去掉了网格线,当我们鼠标点击某一行时,Qt仍然会在鼠标下的单元格周围画上一个选线框。这看起来就像白玉中的一点瑕疵,忍不住就要把它抠出去。网上对此的做法是,自定义一个条目委托(Item Delegate),并重写paint()方法:
1 void NoFocusFrameDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 2 {
3 QStyleOptionViewItem itemOption(option); 4 // remove the focus state
5 if (itemOption.state & QStyle::State_HasFocus) 6 {
7 itemOption.state ^= QStyle::State_HasFocus; 8 }
9 QStyledItemDelegate::paint(painter, itemOption, index); 10 }
上面的代码很简单,仅仅是去掉了State_HasFocus这个状态,绘制工作仍然交由委托实现。
QTableView的上下文菜单,则需要重写contextMenuEvent()实现。上下文的菜单项背景色仍然可以用QSS进行控制。另外,QTableView还有一个单元格对齐的问题。QTableView的默认显示都是左对齐。这时,如果要想某一列都是居中对齐该怎么办那?答案是从QStandardItemModel类派生一个子类,重写虚函数data()。为什么不是从QTableView继承呢?因为我们使用了Qt中的MVC框架。View只管绘制Model中的数据,至于数据内容、格式设置什么的,都在Model里面设置。因此,使用MVC的时候我们大部分工作需要和Model打交道。
话又说回来。这个data()函数带两个参数,第一个参数可以控制那几列(行)怎么对齐。第二个参数是一个Role类型,用于区分不同的数据类型。因为Qt里面的数据分很多种:
我们得指明,当数据是用来显示在单元格中的时候,我们才设置对齐方式啊。不然的话就会乱套了。总之,QSS和2D绘图用好了,界面的效果也会慢慢炫起来。如果自己能够做出精美的界面素材,那么更加是锦上添花了。
遇到的问题
wchar_t的问题。由于底层使用了Windows API实现,免不了要和宽字符打交道。于是用上了QString类的两个静态方
法: fromStdString (), fromStdWString()。用来将标准的string和wstring类型转换为QString类型。但是在链接的时候出错了:
正在阅读:
QTableView 的美化09-18
乐趣的小学生作文06-15
防救灾之政策顺服探究 —小区与地方治理统合之可能模式04-20
武钢集团冷轧厂温度测量系统技术协议20100715 - 图文05-15
1河南工程学院本科毕业设计(论文)管理规定 - 图文03-14
副会长申请书01-28
2018年湖北省黄冈市中考生物试题(word版,含答案)04-20
英文经典微信个性签名02-08
大一思修期末考试试题及答案12-17
- 水处理车间安全操作规程
- TD-LTE网络切换分析指导书V1.01 - 图文
- 2020年岳阳市小升初数学模拟试题与答案
- 推进行政执法改革 理顺部门职责关系
- 19 最大的“书”导学案
- 2017-2022年中国涡街流量计产业发展前景及供需格局预测报告(目录)
- 2011年证券从业资格考试《证券交易》必看考点1
- 2019高考政治一轮复习浙江版训练:特训1
- 门店考勤、休假、加班、交接班管理制度
- c语言学生成绩管理系统实训报告(含源代码)
- 2017年山西省中考语文试卷(含答案)
- 证券经纪业务案例学习
- 颚式破碎机机构综合设计说明书
- 南方果园化学除草技术方案
- 实验二溶质摩尔质量的测定1108
- 2016龙街镇朝阳小学语文四年级下册期末测试卷及答案
- QC小组活动开展过程中存在的普遍问题汇总
- 伊利财报案例分析
- 地铁主变电所简介
- 用Photoshop将柔化的照片调整清晰 - 图文