QTableWidget 用法

本文介绍了如何重写QTableWidget以实现特定的界面和交互效果。内容包括设置不可选中、去除选中虚线框、自定义行数和列数、表头设置、单元格合并及隐藏、单元格内容居中和不可编辑等。此外,还展示了如何插入QDoubleSpinBox控件,以及根据内容调整字体颜色。文章最后分享了一些关于表格操作的实用代码片段,如添加、删除行,获取选中行和内容,以及设置滚动条行为等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重写了一下QTableWidget类

外观设置

    setSelectionMode(QAbstractItemView::NoSelection); // 不可选中
    setFocusPolicy(Qt::NoFocus); //去除选中虚线框
    
    setRowCount(4); // 设置行数
    setColumnCount(2); // 设置列数

    QStringList rowlist;
    heard << "电阻" << "反嵌" << "绝缘" << "交耐";
    setVerticalHeaderLabels(rowlist); // 设置垂直方向表头
    //setHorizontalHeaderLabels(list); // 水平方向表头
    //verticalHeader()->hide(); // 隐藏垂直方向表头
    //horizontalHeader()->hide(); // 隐藏水平方向表头
    // 以下要在设置完表头后再调用
    horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 横向自动拉伸
    horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); // 对第0列单独设置固定宽度
    setColumnWidth(0, 100); // 设置列宽
    verticalHeader()->setDefaultSectionSize(30) // 设置行高
    verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 纵向自动拉伸

合并表头

我也百度了一下, 可以通过窗口嵌套 重写QHeaderView类来实现表头合并, 但我觉得太麻烦了. 不如直接合并单元格, 把单元格当做表头, 效果就是下面这样.
在这里插入图片描述

    // 合并单元格
    setSpan(0, 0, 1, 2); // 第几行 第几列 占几行 占几列
    setRowHidden(0, true); // 设置是否隐藏第一行(表头)

单元格设置

设置好table后还要在每个单元格插入item或者其他控件才能使用.
    for (int num; num < rowlist.size(); num++) {
        QTableWidgetItem *item = new QTableWidgetItem;
        item->setTextAlignment(Qt::AlignCenter); // 内容居中
        item->setFlags(item->flags() & (~Qt::ItemIsEditable)); // 不可编辑
        item->setText(rowlist.at(num));
        setItem(num, 0, item); // 设置item
    }

    QDoubleSpinBox *spin = new QDoubleSpinBox;
    spin->setAlignment(Qt::AlignCenter);
    spin->setDecimals(dec);
    setCellWidget(id, 1, spin); // 插入一个QDoubleSpinBox 用来输入数值

    // 内容改后根据内容设置不同的字体 颜色
    item(row, 1)->setTextColor(QColor("black"));
    item(row, 1)->setFont(QFont(font().family(), font().pointSize() + 5));

一些零碎的知识点代码

  int row = tableWidget->rowCount();//获取表格中当前总行数
  tableWidget->setRowCount(row+1);//添加一行
  tableWidget->removeRow(row);//清除已有的行列
  Int row1 = tableWidget->currentItem()->row();//当前选中行
  bool focus = tableWidget->isItemSelected(tableWidget->currentItem());//判断是否选中一行
  QString proName = tableWidget->item(row, col)->text();//获取某一格内容
  setShowGrid(true);//显示表格线
  verticalHeader()->setVisible(false);//隐藏左边垂直
  QHeaderView *headerView = horizontalHeader();
  headerView->setMovable(false);//去除表头的移动
  headerView->resizeSection(0,284);//设置第一列宽
  headerView->resizeSection(1,127);//设置第二列宽
  headerView->setResizeMode(QHeaderView::Fixed);//列表不能移动
  headerView->setClickable(false);//不响应鼠标单击
  setEditTriggers(QTableWidget::NoEditTriggers);//不能编辑
  setSelectionBehavior(QTableWidget::SelectRows);//一次选中一行
  setSelectionMode(QAbstractItemView::SingleSelection);//只能单选
  setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
  setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项移动
  setAutoScroll(false);//去掉自动滚动
  //根据表格内容增加行高
    connect(ui->tableWidget,SIGNAL(itemChanged(QTableWidgetItem*)),
            ui->tableWidget,SLOT(resizeRowsToContents()));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值