1  均分各列

  1. tableWidget->horizontalHeader()->setStretchLastSection(true); //就是这个地方
  2. tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

2   整行选中:

  1. tableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows); //设置选择行为,以行为单位
  2. tableWidget->setSelectionMode ( QAbstractItemView::SingleSelection); //设置选择模式,选择单行

3  删除选中的整行

  1. int rowIndex = m_pAttrbuteList->currentRow();
  2. if (rowIndex != -)
  3. tableWidget->removeRow(rowIndex);

为了将数据能够在界面中显示的更清楚一些,在这里应用到了tableWidget控件,现将该控件中删除指定行的代码介绍如下:

QTable里有一个removeRow(int i)函数用来删除当前行,但是如果我们没有对于table进行任何的选中,那么QTable是如何返回的呢?
 用Qt Creator里拖了一个tableWidget,加一个按钮,点击删除后执行

  1. int i = ui->tableWidget->currentRow();
  2. QMessageBox msg;
  3. msg.setText(QString::number(i));
  4. msg.exec();
  5. ui->tableWidget->removeRow(i);

在不选择行的情况下发现每次点击后删除的都是第一行,i的输出都是0.

原因其实很简单,就是因为table的当前焦点在第一样的第一个单元格所导致的,解决的办法就是让table失去焦点,在构造函数里面添加ui->tableWidget->setFocusPolicy(Qt::NoFocus);
然后再试,发现点击删除按钮如果不选中行的话是不能删除的,返回的i此时是-1。

控件刚开始的时候左边默认自带序列号,如果想去掉左边的行号,加上下面的代码就可以了。

  1. QHeaderView* headerView = table的名字->verticalHeader();
  2. headerView->setHidden(true);

4 添加整行

  1. int rowIndex = m_pAttrbuteList->rowCount();
  2. tableWidget->setRowCount(rowIndex + );//总行数增加1
  3.  
  4. tableWidget->setRowHeight(rowIndex, );//设置行的高度
  5.  
  6. --------------------------------------------------------------------------------
  7.  
  8. QTableWidget *table = new QTableWIdget(this);
  9.  
  10. table->setColumnCount(); //设置列数
  11.  
  12. table->setRowCount(); //设置行数/
  13.  
  14. /*设置列名*/
  15.  
  16. QStringList headers;
  17.  
  18. headers<<"列名1"<<"列名2"<<"列名3";
  19.  
  20. table->setHorizontalHeaderLabels(headers);
  21.  
  22. /*给单元格添加内容*/
  23.  
  24. void addItemContent(int row, int column, QString content)
  25.  
  26. {
  27.  
  28. QTableWidgetItem *item = new QTableWidgetItem (content);
  29.  
  30. table->setItem(row, column, item);
  31.  
  32. }
  33.  
  34. /*给单元格中增加图标*/
  35.  
  36. QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), NULL); //只加入图标,没有字符串
  37.  
  38. QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), myString); //加入图标和字符串
  39.  
  40. table->setItem(row, column, item);
  41.  
  42. /*插入一行*/
  43.  
  44. int row = table->rowCount();
  45.  
  46. table->insertRow(row);
  47.  
  48. /*插入一列*/
  49.  
  50. int column = table->columnCount();
  51.  
  52. table->insertColumn(column);
  53.  
  54. //使行列头自适应宽度,最后一列将会填充空白部分
  55.  
  56. table->horizontalHeader()->setStretchLastSection(true);
  57.  
  58. //使行列头自适应宽度,所有列平均分来填充空白部分
  59.  
  60. table->horizontalHeader()->setResizeMode(QHeaderView::Strtch);
  61.  
  62. //使行自适应高度,假如行很多的话,行的高度不会一直减小,当达到一定值时会自动生成一个QScrollBar
  63.  
  64. table->verticalHeader()->setResizeMode(QHeaderView::Strtch);
  65.  
  66. //设置单击选择一行
  67.  
  68. table->setSelectionBehuavior(QAbstractItemView::SelectRows);
  69.  
  70. //设置每行内容不可编辑
  71.  
  72. table->setEditTriggers(QAbstractItemView::NoEditTriggers);
  73.  
  74. //设置只能选择一行,不能选择多行
  75.  
  76. table->setSelectionMode(QAbstractItemView::SingleSelection);
  77.  
  78. /*去掉每行的行号*/
  79.  
  80. QHeaderView *headerView = table->verticalHeader();
  81.  
  82. headerView->setHidden(true);
  83.  
  84. /*设置让某个单元格或某行选中*/
  85.  
  86. 选中单元格:table->setCurrentCell(row, column, QItemSelectionModel::Select);
  87.  
  88. 选中一行:table->setCurrentCell(row, QItemSelectionModel::Select);(注意此处的列没有值)

QTableWidget行选中/删除/添加行的更多相关文章

  1. java 在循环中删除数组元素

    在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化. package com.fortunedr.thirdReport; import java.util.ArrayL ...

  2. JavaScript从数组中删除指定值元素的方法

    本文实例讲述了JavaScript从数组中删除指定值元素的方法.分享给大家供大家参考.具体分析如下: 下面的代码使用了两种方式删除数组的元素,第一种定义一个单独的函数,第二种为Array对象定义了一个 ...

  3. sql语句中----删除表数据drop、truncate和delete的用法

    sql语句中----删除表数据drop.truncate和delete的用法 --drop drop table  tb   --tb表示数据表的名字,下同 删除内容和定义,释放空间.简单来说就是把整 ...

  4. javascript中的链表结构—从链表中删除元素

    1.概念 上一个博文我们讲到链表,其中有一个方法remove()是暂时注释的,这个方法有点复杂,需要添加一个Previous()方法找到要删除的元素的前一个节点,这一个博文我们来分析一下这个remov ...

  5. 遍历List过程中删除元素的正确做法(转)

    遍历List过程中删除元素的正确做法   public class ListRemoveTest {     3 public static void main(String[] args) { 4 ...

  6. NHibernate 中删除数据的几种方法

    今天下午有人在QQ群上问在NHibernate上如何根据条件删除多条数据,于是我自己就写了些测试代码,并总结了一下NHibernate中删除数据的方式,做个备忘.不过不能保证囊括所有的方式,如果还有别 ...

  7. 【译】在ASP.Net和IIS中删除不必要的HTTP响应头

    引入 每次当浏览器向Web服务器发起一个请求的时,都会伴随着一些HTTP头的发送.而这些HTTP头是用于给Web服务器提供一些额外信息以便于处理请求.比如说吧.如果浏览器支持压缩功能,则浏览器会发送A ...

  8. 解决Maven项目编译时提示:源值1.5已过时,将在未来所有版本中删除

    每次编译项目时,都提示:源值1.5已过时,将在未来所有版本中删除 查了一些资料,发现是因为IDEA默认把项目的源代码版本设置为jdk1.5,目标代码设置为jdk1.5 解决方案:  修改Maven的S ...

  9. Java中删除文件、删除目录及目录下所有文件(转)

    原文链接:Java中删除文件.删除目录及目录下所有文件 知识点:File.delete()用于删除“某个文件或者空目录”!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除,具体代码示例如下: ...

随机推荐

  1. actor concurrency

    The hardware we rely on is changing rapidly as ever-faster chips are replaced by ever-increasing num ...

  2. [转]ios push

    转:http://blog.csdn.net/showhilllee/article/details/8631734 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 P ...

  3. 用.NET MVC实现长轮询,与jQuery.AJAX即时双向通信

    两周前用长轮询做了一个Chat,并移植到了Azure,还写了篇博客http://www.cnblogs.com/indream/p/3187540.html,让大家帮忙测试. 首先感谢300位注册用户 ...

  4. Hystrix框架3--线程池

    线程池 在Hystrix中Command默认是运行在一个单独的线程池中的,线程池的名称是根据设定的ThreadPoolKey定义的,如果没有设置那么会使用CommandGroupKey作为线程池. 这 ...

  5. Objective-C 原型模式 -- 简单介绍和使用

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建 ...

  6. php单条件查询,关键字查询

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Nginx负载均衡的详细配置及使用案例详解.

    感谢看过这一些列博文和评论的小伙伴, 我把自己所看到的学到的拿到这里来分享是想和大家一起学习进步, 想听听园友给出的意见, 也是对自己学习过程的一个总结. 技术无止境, 我们仍需努力! 1,话不多说, ...

  8. 导入镜像文件,分区启动liunx

    1:更改虚拟机配置 2:导入系统镜像 3:启动虚拟机,选择第一个选项回车 4:这里问你是否检查镜像,我们的镜像肯定没问题不需要检查,点击Skip 5:语言选择,按提示默认下一步 6:主机名也默认 7: ...

  9. SSIS 数据类型和类型转换

    在进行ETL开发时,数据类型(Data Type)是最基础的,但也容易被忽略,楼主使用的SQL Server 版本是2012,用此博文记录,常用的SSIS数据类型和TSQL数据类型的映射.SSIS的数 ...

  10. 如何变相的绕过QQ邮箱订阅的繁琐核审

    先看看正常流程:http://open.mail.qq.com/ 点击“接入订阅”==>申请接入==>登录一下 选择接入完全免费 大概流程就是这样: 下面我们说说快速接入的方法: 1.登录 ...