类别功能API / 方法代码示例初始化创建数据模型new QStandardItemModel(this)model new QStandardItemModel(this);初始化绑定模型到视图tableView-setModel(model)ui-tableView-setModel(model);初始化设置不可编辑setEditTriggers(QAbstractItemView::NoEditTriggers)ui-tableView-setEditTriggers(QAbstractItemView::NoEditTriggers);表头设置水平表头项model-setHorizontalHeaderItem(int, QStandardItem*)model-setHorizontalHeaderItem(i, new QStandardItem(QString::fromLocal8Bit(t)));表头列宽自动拉伸horizontalHeader()-setSectionResizeMode(QHeaderView::Stretch)ui-tableView-horizontalHeader()-setSectionResizeMode(QHeaderView::Stretch);单元格写入设置单元格数据项model-setItem(int row, int col, QStandardItem*)model-setItem(index, columnCount-1, item);单元格写入设置项前景色item-setForeground(QBrush)item-setForeground(QBrush(QColor(255, 0, 0)));单元格写入设置项字体item-setFont(QFont)item-setFont(tableFont);数据读取获取总行数model-rowCount()int row model-rowCount();数据读取获取总列数model-columnCount()auto col model-columnCount()-2;数据读取通过视图获取模型列数tableView-model()-columnCount()auto columnCount ui-tableView-model()-columnCount();数据读取获取单元格 itemmodel-item(int row, int col)if (model-item(i,j))数据读取读取 item 文本item-text()rowItemsText.append(model-item(i, j)-text());视图操作滚动到底部tableView-scrollToBottom()ui-tableView-scrollToBottom();清空清空模型所有数据model-clear()model-clear();说明代码使用的是QTableViewQStandardItemModel的组合不同于同文件中ui-tableWidget用的是QTableWidget后者自带数据模型。model在构造函数中创建并绑定到ui-tableView是整个右下角测量结果表格的数据源。单元格颜色红NG/超限绿OK通过QStandardItem::setForeground实现字体粗体通过setFont(tableFont)实现tableFont在构造函数中设置为 11 号粗体。表头数据来自dog/*.json配置文件中的list字段见combboxChangedSlot函数。清零按钮 (on_pushButton_4_clicked) 和切换型号下拉框都会调用model-clear()清空表格。fromPyQt5.QtWidgetsimport*fromPyQt5.QtGuiimport*fromPyQt5.QtCoreimport*importsysclassTable(QWidget):def__init__(self,argNone):super(Table,self).__init__(arg)self.setWindowTitle(QTableView表格视图控件的例子)self.resize(500,300);self.modelQStandardItemModel(4,4);self.model.setHorizontalHeaderLabels([标题1,标题2,标题3,标题4])forrowinrange(4):forcolumninrange(4):itemQStandardItem(row %s, column %s%(row,column))self.model.setItem(row,column,item)self.tableViewQTableView()self.tableView.setModel(self.model)#下面代码让表格100填满窗口self.tableView.horizontalHeader().setStretchLastSection(True)self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)dlgLayoutQVBoxLayout();dlgLayout.addWidget(self.tableView)self.setLayout(dlgLayout)if__name____main__:appQApplication(sys.argv)tableTable()table.show()sys.exit(app.exec_())importsysfromPyQt5.QtWidgetsimport(QApplication,QWidget,QVBoxLayout,QTableView,QAbstractItemView,QHeaderView,QPushButton)fromPyQt5.QtGuiimportQStandardItemModel,QStandardItem,QBrush,QColor,QFontfromPyQt5.QtCoreimportQTimerclassMainWindow(QWidget):def__init__(self):super().__init__()self.setWindowTitle(QTableView 每秒追加一行模拟实时测量)self.resize(1100,550)layoutQVBoxLayout(self)self.btn_startQPushButton(开始模拟追加数据)self.btn_stopQPushButton(停止)layout.addWidget(self.btn_start)layout.addWidget(self.btn_stop)self.tableViewQTableView()layout.addWidget(self.tableView)self.modelQStandardItemModel(self)self.tableView.setModel(self.model)self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers)self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)# 设置表头只初始化一次self.init_header()# 原始数据源self.rows_data[[263.859,234.687,7.886,20.167,9.00514,5.927,7.8900,NG,-],[263.999,234.857,7.895,20.186,8.95640,5.934,7.8900,OK,OK],[263.883,234.734,7.886,20.141,9.00873,5.936,7.8766,NG,-],[263.862,234.728,7.883,20.118,9.01633,5.921,7.8900,OK,OK],[263.986,234.860,7.876,20.123,9.00313,5.940,7.8898,OK,OK],[263.797,234.648,7.873,20.122,9.02591,5.908,7.8900,OK,OK],[263.891,234.797,7.885,20.128,8.96693,5.944,7.8746,NG,-],]self.data_index0# 当前取到第几行循环游标self.bold_fontQFont()self.bold_font.setBold(True)# 定时器 1000msself.timerQTimer(self)self.timer.setInterval(1000)self.timer.timeout.connect(self.append_one_row)self.btn_start.clicked.connect(self.timer.start)self.btn_stop.clicked.connect(self.timer.stop)definit_header(self):只初始化一次表头header_list[全长,行程,螺纹直径,螺纹长度,螺纹长度,螺纹直径,外径,尺寸结果,表检结果]forcol,textinenumerate(header_list):h_itemQStandardItem(text)self.model.setHorizontalHeaderItem(col,h_item)defappend_one_row(self):定时器回调追加一行# 取当前一行数据游标循环one_rowself.rows_data[self.data_index]self.data_index1ifself.data_indexlen(self.rows_data):self.data_index0new_rowself.model.rowCount()# 在最后插入空行self.model.insertRow(new_row)forcol_idx,txtinenumerate(one_row):itemQStandardItem(txt)iftxtNG:item.setForeground(QBrush(QColor(255,0,0)))item.setFont(self.bold_font)self.model.setItem(new_row,col_idx,item)# 新增完成自动滚动到底部看最新数据self.tableView.scrollToBottom()if__name____main__:appQApplication(sys.argv)winMainWindow()win.show()sys.exit(app.exec_())