QTableWidget 常用方法大赏

博客主要收集了QTableWidget的常用方法,包括设置列表头、列宽,插入行,滚动条操作,自适应行列,禁用水平滚动条,插入和获取控件,设置焦点、选中策略,添加复选框,实现鼠标拖动效果,复制和移动行等,还给出了样式表示例。

QTableWidget常用方法的收集

1.设置列表头

tableWidget->setColumnCount(3);
tableWidget->setHorizontalHeaderLabels(QStringList() << "第一列" << "第二列" << "第三列");

2.设置列宽

tableWidget->setColumnWidth(0, 100);
tableWidget->setColumnWidth(1, 100);
tableWidget->setColumnWidth(2, 100);

3.插入行

ui->tableWidget->insertRow(line);
ui->tableWidget->setItem( line, 0, new QTableWidgetItem("1"));
ui->tableWidget->setItem( line, 1, new QTableWidgetItem("2"));
ui->tableWidget->setItem( line, 2, new QTableWidgetItem("3"));

4.滚动条保持最下方

tableWidget->scrollToBottom();

5.自适应行、列

//自适应行
tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//自适应列
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//自适应列头内容填充
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
//最后一列填充剩余宽度
tableWidget->horizontalHeader()->setStretchLastSection(true);

6.禁用水平滚动条

tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//隐藏
tableWidget->horizontalScrollBar()->hide();

7.插入控件和获取

// row行column列插入widget控件
tableWidget->setCellWidget(row, column, widget);
//获取控件, 获取后再根据类型强转为自己插入的控件
QWidget *w = tableWidget->cellWidget(row, column);

8.设置无焦点

tableWidget->setFocusPolicy(Qt::NoFocus);

9.某项不能点击

tableWidget->item(row, column)->setFlags(Qt::ItemIsSelectable);

10.添加复选框

tableWidget->item(row, column)->setCheckState(Qt::Unchecked);

11.鼠标拖动效果

QScroller *sc = QScroller::scroller(tableWidget);
QScroller::ScrollerGestureType gesture = QScroller::LeftMouseButtonGesture;
sc->grabGesture(tableWidget, gesture);

12.设置选中策略

//选中行的模式
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
//单选
tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);

13.样式表示例

QTableWidget
{
gridline-color: black;
selection-color: #D4237A;
color:#D4237A;
selection-background-color: #595a5c;
font: 12pt "黑体";
}

14.复制行

void copyRow(QTableWidget *table, int from, int to)
{
    int colCount = table->columnCount();
    for(int col=0; col<colCount; col++)
    {
        QString text = table->item(from, col)->text();
        QTableWidgetItem *item = new QTableWidgetItem;
        item->setText(text);
        table->setItem(to, col, item);
    }
}

15.QTableWidget移动行

void moveRow(QTableWidget *table, int from, int to)
{
    if( table == nullptr )
    {
        return;
    }
    if( from == to )
    {
        return;
    }
    if( from < 0 || to < 0 )
    {
        return;
    }
    int rowCount = table->rowCount();
    if( from >= rowCount  || to >= rowCount )
    {
        return;
    }

    int curCol = 0;
    curCol = table->currentColumn();
    QTableWidgetItem *curItem = table->currentItem();
    if( nullptr != curItem )
    {
        curCol = curItem->column();
    }
    int fromRow = from;
    int insertRow = to;
    if( to < from )
    {
        fromRow = from + 1;
        table->insertRow(to);
    }
    else
    {
        insertRow = to + 1;
        table->insertRow(insertRow);
    }
    this->copyRow( table, fromRow, insertRow );
    table->removeRow(fromRow);

    table->selectRow( insertRow );
    table->setCurrentCell(to, curCol);
}
<think>好的,我现在需要帮助用户了解QTableWidget的使用方法。首先,我得回忆一下自己之前学过的Qt相关知识。QTableWidgetQt中用于显示表格数据的一个控件,属于Model/View架构的一部分,但它是基于项的,比使用QTableView和自定义模型更简单一些。不过用户可能不了解这些,所以我需要从基础开始讲起。 首先,我应该介绍QTableWidget的基本概念,比如它是一个表格控件,可以用来显示和编辑二维数据。然后,可能需要分步骤说明如何创建、配置、添加数据、处理信号等。要确保结构清晰,按步骤来,这样用户容易跟随。 接下来,我需要考虑用户可能的应用场景,比如创建一个简单的表格,设置行列数,添加表头,插入数据,处理单元格的点击事件等。这些都是常见的操作,应该涵盖这些内容。 还要注意提到如何设置单元格的属性和样式,比如对齐方式、字体颜色、背景色等,这可能对用户有用。另外,可能还要提到如何调整行列的小,比如设置自适应宽度或者手动调整。 然后,关于数据操作,比如获取或修改单元格的内容,遍历表格中的数据,以及如何添加自定义的控件到单元格中,比如按钮或复选框。这些高级功能可能会帮助用户更灵活地使用表格。 信号和槽的部分也很重要,用户可能需要响应单元格的变化,比如内容修改、选中单元格等事件,所以需要给出示例说明如何连接这些信号到槽函数。 还要注意潜在的问题,比如性能问题,当数据量时,QTableWidget可能不如使用模型/视图高效,这时候可能需要提及QTableView和自定义模型的优势,但用户的问题是QTableWidget,所以可以稍微提到这点,但重点还是放在QTableWidget上。 另外,需要确保示例代码正确,符合PyQt或PySide的语法,但用户没有明确说明使用哪个,可能需要统一用PyQt的示例,或者注明两者类似。同时,按照用户的要求,行内公式用$...$,独立公式用$$...$$,不过在这个问题中可能数学公式较少,但如果有涉及到计算或示例中的数值,可能需要使用,比如设置行列数的例子。 需要检查是否有遗漏的常用功能,比如合并单元格、排序、右键菜单等,这些可能对用户有帮助,但根据时间限制,可能需要简要提及,或者放在高级用法中。 最后,组织内容时,要分步骤,如创建、基本设置、数据操作、信号处理、样式调整等,每个部分用标题分开,示例代码用代码块表示,并加上必要的注释。同时,提醒用户注意内存管理和性能问题,避免在处理数据时出现卡顿。 总结一下,回答的结构应该是: 1. 简介 2. 基本使用步骤(创建、行列设置、表头) 3. 数据操作(插入、获取、修改) 4. 单元格属性和样式 5. 信号与槽 6. 高级功能(自定义控件、排序) 7. 注意事项(性能等) 这样用户能逐步学习,从基础到高级,结构清晰。现在需要把这些内容用中文组织好,确保每个部分都有示例代码,并正确遵循LaTeX格式的要求,虽然在这个问题中可能用到的数学公式不多,但如果有的话要正确应用。例如,在说明行数或列数的时候,可能用$m \times n$这样的表示,但需要按照用户的系统指令处理。</think>### QTableWidget 使用方法详解 QTableWidgetQt 中用于显示和编辑二维表格数据的控件,适合中小规模数据场景。以下是详细使用步骤: --- #### 一、创建与基本配置 ```python from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QHeaderView # 1. 创建表格控件 table = QTableWidget() table.setRowCount(3) # 设置行数,例如:$3 \times 4$ 表格 table.setColumnCount(4) # 2. 设置表头 table.setHorizontalHeaderLabels(["姓名", "年龄", "性别", "职业"]) table.setVerticalHeaderLabels(["行1", "行2", "行3"]) # 3. 自适应列宽(可选) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) ``` --- #### 二、数据操作 1. **插入数据** ```python # 直接设置单元格内容 table.setItem(0, 0, QTableWidgetItem("张三")) table.setItem(0, 1, QTableWidgetItem("25")) # 批量填充 data = [ ["李四", "30", "男", "工程师"], ["王五", "28", "女", "设计师"] ] for row_idx, row_data in enumerate(data, start=1): # 从第2行开始 for col_idx, cell_data in enumerate(row_data): table.setItem(row_idx, col_idx, QTableWidgetItem(cell_data)) ``` 2. **获取/修改数据** ```python item = table.item(0, 0) # 获取单元格对象 print(item.text()) # 输出:张三 table.item(0, 1).setText("26") # 修改年龄为26 ``` --- #### 三、单元格属性与样式 ```python # 1. 对齐方式 item = QTableWidgetItem("居中文本") item.setTextAlignment(0x0004 | 0x0080) # 水平居中 + 垂直居中 # 2. 字体颜色/背景色 item.setForeground(QColor(255, 0, 0)) # 红色字体 item.setBackground(QColor(200, 200, 200)) # 灰色背景 # 3. 禁止编辑 table.setEditTriggers(QTableWidget.NoEditTriggers) ``` --- #### 四、信号与事件处理 ```python # 1. 单元格点击事件 table.cellClicked.connect(lambda row, col: print(f"点击:({row}, {col})")) # 2. 内容修改事件 table.cellChanged.connect(lambda row, col: print(f"修改内容为:{table.item(row, col).text()}")) ``` --- #### 五、高级功能 1. **嵌入控件** ```python from PyQt5.QtWidgets import QPushButton # 在单元格中添加按钮 btn = QPushButton("删除") btn.clicked.connect(lambda: table.removeRow(0)) # 点击删除第一行 table.setCellWidget(0, 3, btn) ``` 2. **排序与搜索** ```python # 启用排序 table.setSortingEnabled(True) # 按列搜索(示例:查找年龄>25的行) for row in range(table.rowCount()): age = int(table.item(row, 1).text()) table.setRowHidden(row, age <= 25) ``` --- #### 六、注意事项 1. **性能问题**:数据量超过 1000 行时,建议改用 `QTableView + QStandardItemModel`。 2. **内存管理**:避免频繁调用 `setRowCount()` 和 `setColumnCount()`。 3. **线程安全**:禁止在多线程中直接操作表格,需通过信号槽机制更新。 --- 通过上述步骤,您可快速实现表格展示、交互和样式定制。如需更复杂的模型操作(如数据库绑定),建议学习 Model/View 架构中的 `QTableView`。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为啥不吃肉捏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值