You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为QTableWidget设置列跨度,使跨列宽度匹配目标表格?

解决QTableWidget合并列宽度匹配问题

你的核心问题在于setSpan参数设置错误,同时缺少列宽适配步骤,以下是修正方案:

问题分析

当前代码里setSpan(1, 1, 2, 2)的跨行数设为2,但表格仅包含2行,这会导致单元格超出表格范围,无法正确合并列。另外未做列宽适配的话,合并后的列宽度不会自动和第一行对应列的总宽度对齐。

修正代码

MovableQtableWidget::MovableQtableWidget(const QString& text, QWidget* parent)
    : QTableWidget(2,3) {
    setWindowTitle(text);

    QStringList ColHeaders, RowHeaders;
    ColHeaders << "Name" << "DR" << "DT";
    RowHeaders << "Armor" << "Ammo";

    this->setHorizontalHeaderLabels(ColHeaders);
    this->setVerticalHeaderLabels(RowHeaders);
    // 正确设置单元格跨度:行索引1,列索引1,跨行1,跨列2
    this->setSpan(1, 1, 1, 2);

    // 让列宽自适应内容,确保合并列宽度与第一行DR+DT列总宽度一致
    this->resizeColumnsToContents();

    this->setStyleSheet("\
        QTableWidget { background-color: rgba(0, 255, 255, 255) }\
        QHeaderView { background-color: rgba(0, 0, 255, 100) }\
        QHeaderView::section { background-color: rgba(0, 255, 0, 100) }\
        QTableCornerButton::section { background-color: rgba(255, 0, 0, 100) }\
        QTableView{border : 3px solid red}\
    ");
}

关键说明

  1. 修正setSpan参数:setSpan的参数格式为(行索引, 列索引, 跨行数量, 跨列数量)。第二行索引是1,需要合并从列1开始的2列,且仅占当前1行,所以参数应为(1, 1, 1, 2)。
  2. 列宽适配:调用resizeColumnsToContents()会让表格根据表头或单元格内容自动调整列宽,合并后的单元格会自动占据对应列的总宽度,和目标表格显示效果一致。如果需要固定列宽,也可以用setColumnWidth()手动设置每列宽度,合并列会继承对应列的总宽度。

内容的提问来源于stack exchange,提问作者Darros99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:25:22