第一范文网 - 专业文章范例文档资料分享平台

QTableView 的美化

来源:用户分享 时间:2020-06-22 本文由巧了我就是酷 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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类型。但是在链接的时候出错了:

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新幼儿教育QTableView 的美化 全文阅读和word下载服务。

QTableView 的美化 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1094481.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top