QTableView的美化

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

QTableView分成表头(Header)和表体(body)两部分。对于表头,我们需要做的不多,仅仅是换下背景色,去掉分节虚线,隐藏掉垂直表头。于是:1m_procssTableView-verticalHeader()-hide();2m_procssTableView-horizontalHeader()-setSectionsClickable(false);3m_procssTableView-horizontalHeader()-setStretchLastSection(true);4m_procssTableView-setSelectionBehavior(QAbstractItemView::SelectRows);5m_procssTableView-setSelectionMode(QAbstractItemView::SingleSelection);6m_procssTableView-setEditTriggers(QAbstractItemView::NoEditTriggers);7m_procssTableView-setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);8m_procssTableView-setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);9m_procssTableView-setShowGrid(false);//disablethetablegrid.10m_procssTableView-verticalHeader()-setDefaultSectionSize(25);//setrowheight.11m_procssTableView-horizontalHeader()-setHighlightSections(false);12m_procssTableView-setFrameShape(QFrame::NoFrame);13m_procssTableView-setItemDelegate(newNoFocusFrameDelegate());表体部分,我们需要去掉网格线,这样看起来更加简洁。一格格的被网格线分开反而觉得被束缚了。其他的就是一些常见的设置选项,不必多说。另外要注意的是,我们总可以看到即便去掉了网格线,当我们鼠标点击某一行时,Qt仍然会在鼠标下的单元格周围画上一个选线框。这看起来就像白玉中的一点瑕疵,忍不住就要把它抠出去。网上对此的做法是,自定义一个条目委托(ItemDelegate),并重写paint()方法:1voidNoFocusFrameDelegate::paint(QPainter*painter,constQStyleOptionViewItem&option,constQModelIndex&index)const2{3QStyleOptionViewItemitemOption(option);4//removethefocusstate5if(itemOption.state&QStyle::State_HasFocus)6{7itemOption.state^=QStyle::State_HasFocus;8}9QStyledItemDelegate::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的问题。由于底层使用了WindowsAPI实现,免不了要和宽字符打交道。于是用上了QString类的两个静态方法:fromStdString(),fromStdWString()。用来将标准的string和wstring类型转换为QString类型。但是在链接的时候出错了:

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功