QTableView获取选中行指定列的内容(新手上路)

1、第一次用QT写东西,在tableview对象后面的函数列表里翻来翻去,找了个看起来顺眼的selectedRows来试图获取选中行的内容,然后插入到list里面。

QList<QModelIndex> list= ui.mould_table->selectionModel()->selectedRows();

qDebug() << list[0].data().toString();
qDebug() << list[1].data().toString();

在取list[0]的值的时候,这很顺利,然鹅当我试图取出list[1]的时候,得到了程序无情的报错,地址越界。

翻阅QT的手册,selectedRows的介绍如下:

“Returns the indexes in the given column for the rows where all columns are selected.”

即取到的是选中行的索引,换句话说,只有被选中行的某一列的的地址,缺省参数是0,也就是首列,所以list里面只插进了一个元素。

2、一个自然的想法是,那我是不是可以直接把选中行的每一列分别插入进list?

            QList<QModelIndex> list;
            if (!ui.mould_table->selectionModel()->selectedRows().isEmpty())
            {
                for (int i = 0; i < 9; i++)
                {
                    list[i] = ui.mould_table->selectionModel()->selectedRows(i);
                    qDebug() << list[i].value(0).data();
                }
            }

 发现还是报错,发现是因为声明的是QModelIndex类型的list,而存多个selectedRows的返回值需要的是QModelIndexList,于是声明处直接改为list[9](我的表共9列),编译通过,可以正常执行。

3、又想了一下,从返回值来看,selectedRows的本意应当是用在选中多行的时候获取选中的到底应该是哪些行,上述操作应该是个邪教用法,而且内存占用似乎也相对大。

变通一番,虽然为了便于管理,我对tableview对象设置的选中策略是每次只能选中单行,但并没必要执着于同时操作整个行,毕竟选中一行就相当于是选中了这行的所有元素,我只要分别取出每个元素就可以了。遂找到了selectedIndexes,手册介绍如下:

Returns a list of all selected model item indexes. The list contains no duplicates, and is not sorted.

很重要的一点是,取出的元素没经过排序,所以插入list的顺序与我的列顺序应当是一致的:

QList<QModelIndex> list =  ui.mould_table->selectionModel()->selectedIndexes();

if (!ui.mould_table->selectionModel()->selectedIndexes().isEmpty())
     {
      qDebug() << sizeof(list);
      for (int i = 0; i < 9; i++)
            {
               qDebug() << list[i].data();
            }
     }

再做尝试,果然可以。

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值