首页 >> 知识 >> QTableWidget完整操作

QTableWidget完整操作

#QTableWidget操作

Bug

1.当QTableWidget没有初始化完成,就获取不到表格的width,此时设置获取表格宽度或者列宽都不正确 2.QTableWidget在TabWidget 中时,需要TabWidget ->setCurrentIndex(i); 此QTableWidget在i这个页面中,才会初始化,否则还是获取不到表格width!!!

设置表格行列 tablewidget->setColumnCount(4);//设置表格列tablewidget->setRowCount(4);//设置表格行 指定列宽、行高 tableWidget->setColumnWidth(3,200); tableWidget->setRowHeight(3,60); 添加一行 int row = tableWidget->rowCount();//获取表格中当前总行数tableWidget->setRowCount(row+1);//加一 清空表格

方法1:

tableWidget->setRowCount(0);

方法2

for (int k = tableWidget->rowCount() - 1; k >= 0; k--)tableWidget->removeRow(k);

删除某一行

tablewidget->removeRow(row);//int 设置无边框 tableWidget->setFrameShape(QFrame::NoFrame); 设置不显示格子线 tableWidget->setShowGrid(false); 去除选中虚线框 tableWidget->setFocusPolicy(Qt::NoFocus); 设置表头内容 QStringList header;headerhorizontalHeader()->setVisible(false); 表头字体加粗 QFont font; font.setBold(true);tableWidget->horizontalHeader()->setFont(font); 指定隐藏的列 tableWidget->hideColumn(0); 双击单元格信号 connect(tableWidget, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(OnDBdoubleClicked(int, int))); 设置为可以选中多个目标 tableWidget>setSelectionMode(QAbstractItemView::ExtendedSelection); //QAbstractItemView::NoSelection 不能选择//QAbstractItemView::SingleSelection 选中单个目标//QAbstractItemView::MultiSelection 选中多个目标 选中一行 tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//QAbstractItemView::SelectItems 0 Selecting single items.选中单个单元格//QAbstractItemView::SelectRows 1 Selecting only rows.选中一行//QAbstractItemView::SelectColumns 2 Selecting only columns.选中一列 滚动条

ui->tableWidget->scrollToBottom(); //让滚动条滚动到最底部 ui->tableWidget->scrollToTop(); //让滚动条滚动到最顶部

表格为只读模式 tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//表格为可更改模式tableWidget->setEditTriggers(QAbstractItemView::AllEditTriggers);//表格全部可修改 //QAbstractItemView::NoEditTriggers 0 不能对表格内容进行修改//QAbstractItemView::CurrentChanged 1 任何时候都能对单元格修改//QAbstractItemView::DoubleClicked 2 双击单元格//QAbstractItemView::SelectedClicked 4 单击已选中的内容//QAbstractItemView::EditKeyPressed 8 Editing starts when the platform edit key has been pressed over an item.//QAbstractItemView::AnyKeyPressed 16 按下任意键就能修改//QAbstractItemView::AllEditTriggers 31 以上条件全包括 单元格不可被选中 item->setFlags(item->flags()&~Qt::ItemIsSelectable); 更改表格单元格内容 信号 connect(tableWidget, SIGNAL(cellChanged(int, int)), this, SLOT(OnChange(int, int))); 表格插入勾选框 auto check = new QTableWidgetItem();check->setCheckState(Qt::Checked);//check->setCheckState(Qt::Unchecked);check->setFlags(check->flags()&(~Qt::ItemIsEditable));//设置该勾选框这一列不能输入值tableWidget->setItem(rowCount, 0, check); 表格插入普通单元格:单元格带不同属性 QTableWidgetItem *newItems = new QTableWidgetItem(data);//data为单元格内容if (isBool)//是否加粗{QFont font; font.setBold(true);newItems->setFont(font);}if (!isEnable)//单元格不可编辑newItems->setFlags(newItems->flags()&(~Qt::ItemIsEditable));tableWidget->setItem(row, col, newItems); 表格插入:普通单元格(无属性设置) tablewidget->setItem(row,col, new QTableWidgetItem(data));//data为字符串//表格插入:按钮QPushButton *button = new QPushButton(QStringLiteral("按钮"));connect(button, &QPushButton::clicked, this, &CenterWnd::OnShow);tableWidget->setCellWidget(row, col, button); 表格插入:按钮 按钮槽事件 QPushButton *line = dynamic_cast(QObject::sender());QModelIndex index = tableWidget->indexAt(line->pos());int row = index.row();//当前按钮所在行列int col = index.column(); 获取单元格内容 QString data = tableWidget->item(row, col)->text();//获取单元格内容:若tableWidget->item(row, col)不存在该单元格,则会中断,最好先判断一下该单元格是否存在if (item)return item->text(); 合并单元格 tableWidget->setSpan(0, 0, 3, 1) # 其参数为: 开始行,开始列,行数,列数 记录滚动条 QScrollBar *scrolBar_;scrolBar_ = tableWidget->verticalScrollBar();int scrolBar_Pos_; //当前行 所在位置scrolBar_Pos_ = scrolBar_->value();scrolBar_->setValue(scrolBar_Pos_);//返回原来位置 右键菜单 tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);//设置菜单项显示方式:右键会发送信号,还会捕捉到右键位置,并用pos存储connect(tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(OnDBMenu(QPoint)));// 右键菜单:捕捉到右键信号void OnDBMenu(QPoint pos){QMenu *MenuDB = new QMenu(this);//初始化菜单QAction *ction_delete = new QAction(QStringLiteral("删除"), this);QAction *action_change = new QAction(QStringLiteral("修改"), this);connect(ction_delete, SIGNAL(triggered()), this, SLOT(OnDelete()));connect(action_change, SIGNAL(triggered()), this, SLOT(OnChange()));MenuDB->addAction(action_change);MenuDB->addAction(ction_delete);MenuDB->exec(QCursor::pos());//通过exec在pos()位置显示该菜单,pos()返回位置} 排序:设置按照某列排序 QHeaderView *header = tableWidget->horizontalHeader();header->setSortIndicator(0, Qt::AscendingOrder);header->setSortIndicatorShown(true); 排序:点击表头,触发槽函数,根据选中点击的那一列排序 connect(tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(record_sortbycolunm(int)));void BasicInfoUI::record_sortbycolunm(int col){tableWidget->sortItems(col, Qt::AscendingOrder);} 设置表格 列 样式:指定列

必须是表格初始化完成后使用才有效果

for (int i = begincol; i horizontalHeader()->setSectionResizeMode(i, QHeaderView::ResizeToContents);else if (mode == 1)//自动调整大小,填充可用空间,屏幕不够大时自动缩小,不会出现滚动条table->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Stretch);else if (mode == 2)//用户无法调整表格列的宽度table->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Fixed);} 设置表格 列 样式:不指定列

必须是表格初始化完成后使用才有效果

if (mode == 0)//设置要根据内容使用宽度的列,会出现滚动条table->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);else if (mode == 1)//自动调整大小,填充可用空间,屏幕不够大时自动缩小,不会出现滚动条table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);else if (mode == 2)//用户无法调整表格列的宽度table->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);table->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);//可手动拖拉列宽,可配合上面几种一起使用 表格单元格增加代理(详见QComBox 和 QLineEdit 代理笔记QItemDelegate):QLineEdit QLineEdit *lineEdit = new QLineEdit();lineEdit->setStyleSheet("border:none");lineEdit->setText(data);tableWidget->setCellWidget(row, col, lineEdit);setRegExpNum(lineEdit, editModel);if (!isEnable)//不可编辑lineEdit->setEnabled(false);if (isBool)//是否加粗{QFont font; font.setBold(true);lineEdit->setFont(font);} 表格单元格增加代理:QLineEdit值更改发出信号 void OnChangeItemLineEdit(const QString &string){QLineEdit *line = dynamic_cast(QObject::sender());QModelIndex index = ui_.tableWidget_GYLC->indexAt(line->pos());int row = index.row();int col = index.column();OnChangeTable(row, col);}
网站地图