关于QTableWidget中单元格的合并

无意中发现了Qt中QTableWidget可以实现单元格的合并,函数为setSpan,函数原型如下:

void QTableView::setSpan(int row, int column, int rowSpanCount, int columnSpanCount)

参数为:行数、列数、需要合并的行总数、需要合并的列总数。

写了一个测试函数,代码如下:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->tableWidget->setRowCount(10);
    ui->tableWidget->setColumnCount(10);

    for (int i(0); i<10; ++i)
    {
        for (int j(0); j<10; ++j)
        {
            QTableWidgetItem *pItem = new QTableWidgetItem;
            pItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter)
            ui->tableWidget->setItem(i, j, pItem);
        }
    }

    int column[]{0, 3, 6, 8};
    int rowCount = ui->tableWidget->rowCount();
    int col = sizeof(column)/sizeof(column[0]);
    for (int i(0); i<rowCount; i += 3)
    {
        for (int j(0); j<col; ++j)
        {
            ui->tableWidget->setSpan(i, column[j], 3, 1);
        }
    }

    ui->tableWidget->item(0, 0)->setText("(1,1)");
    ui->tableWidget->item(1, 0)->setText("(2,1)");
    ui->tableWidget->item(2, 0)->setText("(3,1)");
    ui->tableWidget->item(3, 0)->setText("(4,1)");
}

显示结果如下:
在这里插入图片描述
作为测试,我特意在代码中加入了几行用于显示坐标的代码,由结果可见,合并之后的单元格,只有初始的那一个才能正常显示,其他的都已经不能显示了

被合并的单元格的索引都指向第一个单元格。

鉴于此,我又加了几条测试信息:

    qDebug() << ui->tableWidget->item(0, 0);
    qDebug() << ui->tableWidget->item(1, 0);
    qDebug() << ui->tableWidget->item(2, 0);
    qDebug() << ui->tableWidget->item(3, 0);

打印输出如下:
在这里插入图片描述
然后我又加了几条测试语句:

    qDebug() << ui->tableWidget->item(0, 0)->text();
    qDebug() << ui->tableWidget->item(1, 0)->text();
    qDebug() << ui->tableWidget->item(2, 0)->text();
    qDebug() << ui->tableWidget->item(3, 0)->text();

打印结果如下:
在这里插入图片描述

由此可见,这几个item还是存在的,并且文字也是有的,而且是当时设置的那个,只不过是不显示了

然后,我将其中(0,0)坐标的单元格恢复合并之前的状态,代码如下:

ui->tableWidget->setSpan(0, 0, 1, 1);

显示结果如下:
在这里插入图片描述
由上面的演示结果可以看出,这个setSpan函数,仅仅是将某个(些)单元格的显示范围变大,对于合并范围之内的其他单元格仅仅是隐藏掉罢了,并没有删除任何原先存在的单元格

  • 16
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值