三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

tableView 相关 API 一览表

tableView 相关 API 一览表
类别功能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();

说明

  • 代码使用的是QTableView+QStandardItemModel的组合(不同于同文件中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,arg=None):super(Table,self).__init__(arg)self.setWindowTitle("QTableView表格视图控件的例子")self.resize(500,300);self.model=QStandardItemModel(4,4);self.model.setHorizontalHeaderLabels(['标题1','标题2','标题3','标题4'])forrowinrange(4):forcolumninrange(4):item=QStandardItem("row %s, column %s"%(row,column))self.model.setItem(row,column,item)self.tableView=QTableView()self.tableView.setModel(self.model)#下面代码让表格100填满窗口self.tableView.horizontalHeader().setStretchLastSection(True)self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)dlgLayout=QVBoxLayout();dlgLayout.addWidget(self.tableView)self.setLayout(dlgLayout)if__name__=='__main__':app=QApplication(sys.argv)table=Table()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)layout=QVBoxLayout(self)self.btn_start=QPushButton("开始模拟追加数据")self.btn_stop=QPushButton("停止")layout.addWidget(self.btn_start)layout.addWidget(self.btn_stop)self.tableView=QTableView()layout.addWidget(self.tableView)self.model=QStandardItemModel(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_index=0# 当前取到第几行,循环游标self.bold_font=QFont()self.bold_font.setBold(True)# 定时器 1000msself.timer=QTimer(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_item=QStandardItem(text)self.model.setHorizontalHeaderItem(col,h_item)defappend_one_row(self):"""定时器回调:追加一行"""# 取当前一行数据,游标循环one_row=self.rows_data[self.data_index]self.data_index+=1ifself.data_index>=len(self.rows_data):self.data_index=0new_row=self.model.rowCount()# 在最后插入空行self.model.insertRow(new_row)forcol_idx,txtinenumerate(one_row):item=QStandardItem(txt)iftxt=="NG":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__":app=QApplication(sys.argv)win=MainWindow()win.show()sys.exit(app.exec_())

← 返回列表