Qt 模型视图编程之表头设置
背景
Qt 模型視圖編程中模型定義了標準接口對數據進行訪問,可根據需求繼承對應的抽象模型類來實現自定義的數據模型。一個基本的數據模型至少要實現以下虛函數:
①.rowCount:行數,返回要顯示多少行;
②.columnCount:列數,返回要顯示多少列
③.data:讀取數據,返回每個單元格要顯示的內容
視圖不會主動更新數據的顯示,模型使用 dataChanged 信號通知視圖數據發生變化。
表頭相關接口
①.概述
在視圖界面中除了顯示數據外,還包含了橫向、縱向兩個表頭的顯示;在數據模型中也提供了對表頭進行設置的接口。
②.關鍵虛函數
headerData:數據模型對外提供的獲取表頭顯示內容的接口;
setHeaderData:數據模型對外提供的可設置表頭的內容的接口。
③.表頭更新信號
headerDataChanged:表頭內容更新信號,通知界面更新顯示。
④.默認表頭內容
橫向和縱向表頭默認值顯示為對應的行號和列號,從 1 開始;當不需自定義表頭內容時,直接調用基類的方法返回其默認實現即可。
設置模型表頭內容
①.概述
一般在用于數據顯示時其表頭內容在初始化時設定好即可,通常無需變動。
②.TableModelDemo.h 文件
③.TableModelDemo.cpp 文件
QVariant TableModelDemo::headerData(int section, Qt::Orientation orientation, int role /*= Qt::DisplayRole*/) const {if (orientation == Qt::Horizontal)//只更改橫向表頭{switch (role){case Qt::DisplayRole:return m_header[section];default:break;}}return QAbstractTableModel::headerData(section, orientation, role);//返回默認實現 }④.數據模型初始化
student s; s.age = 18; s.name = "張三"; s.sex = "男"; m_list.append(s); ? s.age = 16; s.name = "李四"; s.sex = "女"; m_list.append(s); ? QList<QString> m_header{ "姓名","年齡","性別" }; auto mode = new TableModelDemo(m_list, m_header); ? ui.tableView->setModel(mode);更改模型表頭內容
①.更改單個表頭內容
通過 setHeaderData 可以設置單個表頭內容的顯示,并通過信號通知視圖刷新顯示:
bool TableModelDemo::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role /*= Qt::EditRole*/) {if (orientation == Qt::Horizontal){m_header[section] = value.toString(); ?emit headerDataChanged(orientation, section, section); ?return true;}return false; }②.更改整個表頭內容
當視圖關聯的模型變更時,通常也需要對其表頭內容進行對應更改:
void TableModelDemo::setCustomData(QList<student> & l) {int m_rowCount = rowCount(QModelIndex());int m_colCount = columnCount(QModelIndex()); ?m_list = l;emit dataChanged(index(0, 0), index(m_rowCount - 1, m_rowCount - 1)); }總結
以上是生活随笔為你收集整理的Qt 模型视图编程之表头设置的全部內容,希望文章能夠幫你解決所遇到的問題。