目录

官方解析

博主例子


官方解析

官方有个很好的例子:

Frozen Column Example

但感觉有点冗余!在后面我将修改官方的例子,以及说明下这个效果的原理:

Qt模型视图框架

使用两个视图在同一个模型上,使用叠加技术,到达冻结某列的效果,

原理:两视图共享模型!

先把一个视图放到另外一个视图上面,只保留某一列显示,其他列隐藏,并且使用stackUnder()把其放在最上面,然后第二个模型在他下面。

隐藏视图的竖直方向上的头部

说白了,就是一个view放到另外一个view的上面,上面的view不动,下面的view动,就可以实现这种效果!

博主例子

程序运行截图如下:

源码如下:

mytableview.h

#ifndef MYTABLEVIEW_H
#define MYTABLEVIEW_H#include <QTableView>QT_BEGIN_NAMESPACE
class QStandardItemModel;
QT_END_NAMESPACEclass MyTableView : public QTableView
{Q_OBJECT
public:MyTableView(QWidget *parent = 0);protected:void updateTopTableViewGeometry();void resizeEvent(QResizeEvent *event)Q_DECL_OVERRIDE;private:void init();QTableView *m_topTableView;QStandardItemModel *m_model;};#endif // MYTABLEVIEW_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

mytableview.cpp

#include "mytableview.h"
#include <QStandardItemModel>
#include <QHeaderView>
#include <QScrollBar>
#include <QDebug>MyTableView::MyTableView(QWidget *parent) : QTableView(parent)
{m_model=new QStandardItemModel;QStringList headList;headList<<"bottomView col 1"<<"bottomView col 2"<<"bottomView col 3"<<"bottomView col 4"<<"bottomView col 5"<<"bottomView col 6"<<"bottomView col 7"<<"bottomView col 8"<<"bottomView col 9";m_model->setHorizontalHeaderLabels(headList);for(int i=0;i<100;i++){for(int j=0;j<9;j++){QStandardItem *newItem=new QStandardItem("row: "+QString::number(i+1)+"  col: "+QString::number(j+1));m_model->setItem(i,j,newItem);}}setModel(m_model);horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);init();connect(m_topTableView->verticalScrollBar(), &QAbstractSlider::valueChanged,verticalScrollBar(), &QAbstractSlider::setValue);connect(verticalScrollBar(), &QAbstractSlider::valueChanged,m_topTableView->verticalScrollBar(), &QAbstractSlider::setValue);
}void MyTableView::updateTopTableViewGeometry()
{m_topTableView->setGeometry(verticalHeader()->width()+frameWidth(),frameWidth(),columnWidth(0),viewport()->height()+horizontalHeader()->height());
}void MyTableView::resizeEvent(QResizeEvent *event)
{QTableView::resizeEvent(event);updateTopTableViewGeometry();
}void MyTableView::init()
{m_topTableView=new QTableView(this);m_topTableView->setFocusPolicy(Qt::NoFocus);m_topTableView->verticalHeader()->hide();m_topTableView->setModel(m_model);m_topTableView->setStyleSheet("QTableView { border: none;""background-color: rgb(255,255,0);""selection-background-color: rgb(0,255,255)}");m_topTableView->setSelectionModel(selectionModel());for(int i=1;i<m_model->columnCount();i++){m_topTableView->setColumnHidden(i,true);}m_topTableView->setColumnWidth(0,columnWidth(0));m_topTableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);m_topTableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);updateTopTableViewGeometry();setHorizontalScrollMode(ScrollPerPixel);setVerticalScrollMode(ScrollPerPixel);m_topTableView->setVerticalScrollMode(ScrollPerPixel);
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}

Qt文档阅读笔记-两视图共享模型实现冻结列效果(frozencolumn解析与实例)相关推荐

  1. Qt文档阅读笔记-隐式共享(Implicit Sharing)深入研究(理论及实例)

    Qt里面很多C++类都是采用隐式共享最大限度的提高资源利用率以及最新复制的原则.隐式共享数据作为参数时,不仅安全而且高效,因为传的是一个指针并且只有要修改这个数据时才会去拷贝,这里有个专业词汇copy ...

  2. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  3. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  4. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  5. Qt文档阅读笔记-对Style Plugin Example实例的解析

    目录 前言 Style Plugin Example SimpleStylePlugin Class 定义 SimpleStylePlugin Class 实现 main()函数 The Simple ...

  6. Qt文档阅读笔记-QML Canvas的官方解析及实例

    目录 官方解析 博主例子 官方解析 Canvas可以用于画直线或曲线,简单或复杂的形状,图形,图片,并且他能加文字,颜色,阴影,和颜色梯度,和其他的装饰,可以进行低像素操作.Canvas可以保存成图像 ...

  7. Qt文档阅读笔记-QWebEngineView及QML WebEngineView

    这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...

  8. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)

    moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...

  9. Qt文档阅读笔记-Fortune Client Example实例解析

    目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...

最新文章

  1. java InputStream读取数据问题【转http://cuisuqiang.iteye.com/blog/1434416】
  2. JZOJ 4366. 【GDKOI2016】项链
  3. (9) hibernate加载持久化对象的两种方式——get、load
  4. JSON 解析的两种方法
  5. LeetCode 678 有效的括号字符串,常规栈思路
  6. Linux(Centos7) 设置静态IP
  7. 单片机拼字程序怎么做_小程序商城怎么做?做一个小程序需要多少钱
  8. 我的内核学习笔记14:内核设备树学习
  9. mysql的实践小结的作文_MySql小结
  10. android 文件流转换为zip文件_PDF文件如何转换为TXT文本?教您一招高效转换的方法...
  11. 遥感学习笔记(四)——遥感数据分类
  12. 小程序汉字拼音的解决思路
  13. keras入门 ---在小数据集上训练神经网络
  14. 冰桶挑战引来了百度搜索冰桶算法
  15. 和平精英服务器维护怎么办,和平精英登陆不了怎么办 和平精英无法登陆解决方法...
  16. 谭浩强C++ 第十章
  17. 如何在Java中将double转换为int?
  18. C++ 函数:accumulate()
  19. FCBF算法的Matlab实现
  20. logistic回归报错问题:Warning messages: 1: glm.fit:算法没有聚合 2: glm.fit:拟合機率算出来是数值零或一

热门文章

  1. 组策略系列之四:《精典放送:组策略管理20点》
  2. DataTable,DataView和DataGrid中一些容易混淆的概念
  3. jquery validate 中文教程【入门到精通】
  4. 趣味故事嘛的facebook中文网
  5. 门户网站的免费写手我们可怜的SEOer
  6. 需要符合互联网时代需求的《飞秋》
  7. 关羽在韩国有块私家地?
  8. 一种巧妙的删除程序自己的方法
  9. 我真的是前端公众号 NO.1 ?
  10. 拜托!代码有BUG不一定都是程序员的锅