QTableWidget行选中/删除/添加行

1  均分各列

tableWidget->horizontalHeader()->setStretchLastSection(true); //就是这个地方
 tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
2   整行选中:

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

3  删除选中的整行

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


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

QTable里有一个removeRow(int i)函数用来删除当前行,但是如果我们没有对于table进行任何的选中,那么QTable是如何返回的呢?
 用Qt Creator里拖了一个tableWidget,加一个按钮,点击删除后执行
 int i = ui->tableWidget->currentRow();
 QMessageBox msg;
 msg.setText(QString::number(i));
 msg.exec();
 ui->tableWidget->removeRow(i);
 在不选择行的情况下发现每次点击后删除的都是第一行,i的输出都是0.

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

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

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

4 添加整行

int rowIndex = m_pAttrbuteList->rowCount();
 tableWidget->setRowCount(rowIndex + 1);//总行数增加1

tableWidget->setRowHeight(rowIndex, 24);//设置行的高度

--------------------------------------------------------------------------------

QTableWidget *table = new QTableWIdget(this);

table->setColumnCount(5);    //设置列数

table->setRowCount(3);        //设置行数/

/*设置列名*/

QStringList headers;

headers<<"列名1"<<"列名2"<<"列名3";

table->setHorizontalHeaderLabels(headers);

/*给单元格添加内容*/

void addItemContent(int row, int column, QString content)

{

QTableWidgetItem *item = new QTableWidgetItem (content);

table->setItem(row, column, item);

}

/*给单元格中增加图标*/

QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), NULL);  //只加入图标,没有字符串

QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), myString);   //加入图标和字符串

table->setItem(row, column, item);

/*插入一行*/

int row = table->rowCount();

table->insertRow(row);

/*插入一列*/

int column = table->columnCount();

table->insertColumn(column);

//使行列头自适应宽度,最后一列将会填充空白部分

table->horizontalHeader()->setStretchLastSection(true);

//使行列头自适应宽度,所有列平均分来填充空白部分

table->horizontalHeader()->setResizeMode(QHeaderView::Strtch);

//使行自适应高度,假如行很多的话,行的高度不会一直减小,当达到一定值时会自动生成一个QScrollBar

table->verticalHeader()->setResizeMode(QHeaderView::Strtch);

//设置单击选择一行

table->setSelectionBehuavior(QAbstractItemView::SelectRows);

//设置每行内容不可编辑

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

//设置只能选择一行,不能选择多行

table->setSelectionMode(QAbstractItemView::SingleSelection);

/*去掉每行的行号*/

QHeaderView *headerView = table->verticalHeader();

headerView->setHidden(true);

/*设置让某个单元格或某行选中*/

选中单元格:table->setCurrentCell(row, column, QItemSelectionModel::Select);

选中一行:table->setCurrentCell(row, QItemSelectionModel::Select);(注意此处的列没有值)

时间: 2024-08-08 10:23:51

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

Linux中删除文件,磁盘空间未释放问题追踪

在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放.是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景 一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除.当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间. 我们发现剩余磁盘空间比较少时,回去删除一些大的临时文件或者log文件,如果删除之后会发现磁盘空间并未减少,那么可以通过"lsof"命令去查看正在使用该文件的

运维之我的docker-swarm集群中删除节点和服务

删除swam节点 如果有的确实想要从swarm集群中删除,你应该先把这个节点容器排空,然后再把节点从集群中去掉. 排空节点(其实就是把这个节点上的容器先从其它节点启动,再停掉排空节点上的容器,保证你定义服务的预先状态不受影响) docker node update --availability drain g36lvv23ypjd8v7ovlst2n3yt 删除指定节点 docker node rm  node9 docker node rm --force node9 删除服务 删除服务以后容

ODI中删除数据的处理

一.前提知识:数据从源数据库向数据仓库抽取时,一般采用以下几种方式: 全抽取模式如果表的数据量较小,则可以采取全表抽取方式,以TRUNCATE/INSERT方式进行数据抽取. 基于时间戳的抽取模式如果源数据表是不可更新的数据(如大多数事务处理数据)或者是不可删除数据(只能失效历史记录的情况),则根据变更时间戳,抽取最新变更的数据进行同步. 日志分析如果没有更新时间戳,或者源数据存在删除的情况,则可以进行日志分析,来执行最新数据变更的同步. 说明:时间戳的方式如果要处理删除数据的情况,需要在源表创

git中手动删除的文件如何在git中删除

在日常开发中,我们可能或手动删除(delete键删除的)一些文件,然而我们本来应该是用git rm fileName命令删除的,但是现在我们手动删除了,那么要如何在git里面讲那些手动删除的文件删除呢? 我们这里有两种方法可以在git中删除那些手动删除(delete键删除的)的文件: 第一种就是用 git rm files 删除你手动删除的文件或文件夹. 当然,如果你删除的文件有很多,而且分布在不同的文件夹中,使用第一种 git rm files 的方法,显然不方便,效率也很低下,那么有没有更快

TreeViewItem实现整行选中 (两种用法)

用法一 1 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 3 <PathGeometry x:Key="TreeArrow" Figures="M0,0 L0,6 L6,0 z&q

php数组中删除元素之重新索引

如果要在某个数组中删除一个元素,可以直接用的unset,但今天看到的东西却让我大吃一惊 <?php $arr = array('a','b','c','d'); unset($arr[1]); print_r($arr); ?> print_r($arr) 之后,结果却不是那样的,最终结果是 Array ( [0] => a [2] => c [3] => d ) 那么怎么才能做到缺少的元素会被填补并且数组会被重新索引呢?答案是 array_splice(): <?ph

“未能从策略 Default Domain Policy 中删除应用程序 Microsoft Office Professional Plus 2010”错误解决

操作过程: 笔者通过组策略部署Office 2010时,由于部署方式不对,尽管在"软件部署"中删除了Office 2010,但启动计算机时,总提示"正在删除托管的Office 2010",同时日志文件中出现提示"未能从策略 Default Domain Policy 中删除应用程序 Microsoft Office Professional Plus 2010.错误为: %%1603". 解决方法: 通过Windows Installer Cle

f2fs解析(十)nid 如何从nat_root中删除

上面我们谈到了一个nid如何从free_nid中转移到node_info中去[分别有一个链表和一棵基数树搭伙做事],讲free_nid时,详细说明了free_nid中是如何进如何出的,上一篇说了nid是如何进入nat_root的,当然一个nid进入nat_root的情况不止如此呢,还包括如果读磁盘中已经存在的一个nid,这个nid的缓存也是存在这里的. 那么现在说说nat_root中的nid是如何刷回去的! 涉及一个函数:__del_from_nat_cache 两个地方调用:1)f2fs_ba

在Android Studio中删除module

当你想在Android Studio中删除某个module时,大家习惯性的做法都是选中要删除的module,右键去找delete.但是 在Android Studio中你选中module,右键会发现没有delete,如图: 为什么会没有delete按钮,不科学啊,难道是Android Studio的bug或者设计组考虑不周.其实这边没有delete按钮主要原因是因为Android Studio对module做了一个保护机制,就是一个module你是不能随意删除的,要删除你必须得先把module从