Qt学习笔记 TableWidget使用说明和增删改操作的实现

看一下效果很简单的一个小功能

先说分部讲一下过程 再给出详细代码 

添加数据

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->tableWidget->setColumnCount(2);
    ui->tableWidget->setRowCount(2);
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"name"<<"age");
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行选中的方式
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);   //禁止修改
    ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);  //设置为可以选中单个
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("zhangsan"));
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("1"));
    ui->tableWidget->verticalHeader()->setVisible(false);   //隐藏列表头

    ui->tableWidget->setItem(1,0,new QTableWidgetItem("lisi"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("20"));
    ui->tableWidget->selectRow(0);
}

 

进行增删除修改操作

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->tableWidget->setColumnCount(2);
    ui->tableWidget->setRowCount(2);
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"name"<<"age");
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行选中的方式
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);   //禁止修改
    ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);  //设置为可以选中单个
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("zhangsan"));
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("1"));
    ui->tableWidget->verticalHeader()->setVisible(false);   //隐藏列表头

    ui->tableWidget->setItem(1,0,new QTableWidgetItem("lisi"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("20"));
    ui->tableWidget->selectRow(0);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
{

    if(previous!=Q_NULLPTR)
    {
        previous->setBackgroundColor(Qt::transparent);
    }
    if(current==Q_NULLPTR)return;
    current->setBackgroundColor(Qt::blue);
}

void MainWindow::on_btn_Add_clicked()
{
//    QAbstractItemModel *model = ui->tableWidget->model();
//     model->insertRow(model->rowCount());
    int cols=ui->tableWidget->columnCount();
    int rows=ui->tableWidget->rowCount();
    qDebug()<<rows;
    ui->tableWidget->insertRow(rows);
    for(int i=0;i<cols;i++)
    {
        ui->tableWidget->setItem(rows,i,new QTableWidgetItem("new"+QString::number(rows)));
    }
    ui->tableWidget->selectRow(rows);
}

void MainWindow::on_btn_Del_clicked()
{
    QTableWidgetItem * item = ui->tableWidget->currentItem();
    if(item==Q_NULLPTR)return;
    ui->tableWidget->removeRow(item->row());
}

void MainWindow::on_btn_Modify_clicked()
{
    QModelIndex index =  ui->tableWidget->currentIndex();
    QList<QTableWidgetItem *> listItem = ui->tableWidget->selectedItems();
    if(listItem.count()==0)return;
    foreach (QTableWidgetItem * item, listItem) {
        item->setText("modify");
    }
//    QTableWidgetItem * item = ui->tableWidget->currentItem();
//    if(item==Q_NULLPTR)return;
//    item->setText("modify");
}

 

这里有一些对TableWidget的设置说明一下

 

1. 将表格变为禁止编辑

在默认情况下,表格里的字符是可以更改的,比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:

 tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚举中的一个,都是触发修改单元格内容的条件:

 


QAbstractItemView.NoEditTriggers


0


No editing possible. 不能对表格内容进行修改


QAbstractItemView.CurrentChanged


1


Editing start whenever current item changes.任何时候都能对单元格修改


QAbstractItemView.DoubleClicked


2


Editing starts when an item is double clicked.双击单元格


QAbstractItemView.SelectedClicked


4


Editing starts when clicking on an already selected item.单击已选中的内容


QAbstractItemView.EditKeyPressed


8


Editing starts when the platform edit key has been pressed over an item.


QAbstractItemView.AnyKeyPressed


16


Editing starts when any key is pressed over an item.按下任意键就能修改


QAbstractItemView.AllEditTriggers


31


Editing starts for all above actions.以上条件全包括

 

2. 设置表格为整行选择

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行选中的方式

QAbstractItemView.SelectionBehavior枚举还有如下类型

 


Constant


Value


Description


QAbstractItemView.SelectItems


0


Selecting single items.选中单个单元格


QAbstractItemView.SelectRows


1


Selecting only rows.选中一行


QAbstractItemView.SelectColumns


2


Selecting only columns.选中一列

 

 

3.单个选中和多个选中的设置:

tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  //设置为可以选中多个目标

该函数的参数还可以是:

QAbstractItemView.NoSelection      不能选择

QAbstractItemView.SingleSelection  选中单个目标

QAbstractItemView.MultiSelection    选中多个目标

QAbstractItemView.ExtendedSelection   QAbstractItemView.ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选

 

4. 表格表头的显示与隐藏

对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置:

    tableWidget->verticalHeader()->setVisible(false);   //隐藏列表头
    tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头

5. 对表头文字的字体、颜色进行设置

    QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象
    columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体
    columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色
    columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色  

6. 在单元格里加入控件:

QTableWidget不仅允许把文字加到单元格,还允许把控件也放到单元格中。比如,把一个下拉框加入单元格,可以这么做:

    QComboBox *comBox = new QComboBox();
    comBox->addItem("Y");
    comBox->addItem("N");
    tableWidget->setCellWidget(0,2,comBox);  

6. 在单元格里加入控件:

    QWidget * widget=ui->tableWidget->cellWidget(i,0);//获得widget
    QComboBox *combox=(QComboBox*)widget;//强制转化为QComboBox
    QString string=combox->currentText();
    qDebug()<<string;    

二. 对单元格的进行设置

1. 单元格设置字体颜色和背景颜色 及字体字符

    QTableWidgetItem *item = new QTableWidgetItem("Apple");
    item->setBackgroundColor(QColor(0,60,10));
    item->setTextColor(QColor(200,111,100));
    item->setFont(QFont("Helvetica"));
    tableWidget->setItem(0,3,item);  

另:如果需要对所有的单元格都使用这种字体,则可以使用  tableWidget->setFont(QFont("Helvetica"));

2. 设置单元格内文字的对齐方式

这个比较简单,使用newItem.setTextAlignment()函数即可,该函数的参数为单元格内的对齐方式,和字符输入顺序是自左相右还是自右向左。

水平对齐方式有:

 

Constant Value Description
Qt.AlignLeft 0x0001 Aligns with the left edge.
Qt.AlignRight 0x0002 Aligns with the right edge.
Qt.AlignHCenter 0x0004 Centers horizontally in the available space.
Qt.AlignJustify 0x0008 Justifies the text in the available space.

 

垂直对齐方式:

 

Constant Value Description
Qt.AlignTop 0x0020 Aligns with the top.
Qt.AlignBottom 0x0040 Aligns with the bottom.
Qt.AlignVCenter 0x0080 Centers vertically in the available space.

 

如果两种都要设置,只要用 Qt.AlignHCenter |  Qt.AlignVCenter 的方式即可

 

3. 合并单元格效果的实现:

tableWidget->setSpan(0, 0, 3, 1)  # 其参数为: 要改变单元格的   1行数  2列数     要合并的  3行数  4列数

 

4. 设置单元格的大小

首先,可以指定某个行或者列的大小

    tableWidget->setColumnWidth(3,200);
    tableWidget->setRowHeight(3,60);  

还可以将行和列的大小设为与内容相匹配

    tableWidget->resizeColumnsToContents();
    tableWidget->resizeRowsToContents(); 

5. 获得单击单元格的内容

通过实现 itemClicked (QTableWidgetItem *) 信号的槽函数,就可以获得鼠标单击到的单元格指针,进而获得其中的文字信息

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));

//将itemClicked信号与函数getItem绑定


6.QTableWidget要调整表格行宽主要涉及以下一个函数

resizeColumnsToContents();                      根据内容调整列宽          
resizeColumnToContents(int col);               根据内容自动调整给定列宽
horizontalHeader()->setResizeMode           把给定列设置为给定模式
主要模式有Stretch和Fixed

7.

int row = rowCount();
 removeRow(row);//清除已有的行列
 setShowGrid(true);//显示表格线
 verticalHeader()->setVisible(false);//隐藏左边垂直
 QHeaderView *headerView = horizontalHeader();
 headerView->setMovable(false);//去除表头的移动
 headerView->resizeSection(0,284);//设置第一列宽
 headerView->resizeSection(1,127);//设置第二列宽
 headerView->setResizeMode(QHeaderView::Fixed);//列表不能移动
 headerView->setClickable(false);//不响应鼠标单击
 setEditTriggers(QTableWidget::NoEditTriggers);//不能编辑
 setSelectionBehavior(QTableWidget::SelectRows);//一次选中一行
 setSelectionMode(QAbstractItemView::SingleSelection);//只能单选
 /*QScrollBar *scrollBar = horizontalScrollBar();
 scrollBar->hide();*/
 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
 setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项移动
 setAutoScroll(false);//去掉自动滚动

 

时间: 2024-10-12 22:46:49

Qt学习笔记 TableWidget使用说明和增删改操作的实现的相关文章

Mysql学习笔记(六)增删改查

原文:Mysql学习笔记(六)增删改查 PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values("要插入的数据"); 比如说,我们先创建一个宠物表,用来记录宠物的基本信息以及所有者... create table pet ( name varchar(20), owner varchar(20), species varchar(20), sex cha

MySQL学习笔记之数据的增、删、改实现方法_Mysql

本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) create table test21(name varchar(32)); insert into test21 (name) values ('huangbiao'); 插入原则: 1.插入的数据应与字段的数据类型相同 2.数据的大小应该在列的规定范围内 3.在values中列出的数据位置必须与被加入的列

JavaScript学习笔记之数组的增、删、改、查_javascript技巧

在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 数组是JavaScript中常见的一个对象,它有一些经典的操作,比如数组的增.删.改.查.在这篇文章中主要整理这方面的相关操作方法. 增

Jquery easyui开启行编辑模式增删改操作_jquery

jQuery EasyUI 框架提供了创建网页所需的一切,帮助您轻松建立站点. easyui 是一个基于 jQuery 的框架,集成了各种用户界面插件. easyui 提供建立现代化的具有交互性的 javascript 应用的必要的功能. 使用 easyui,您不需要写太多 javascript 代码,一般情况下您只需要使用一些 html 标记来定义用户界面. HTML 网页的完整框架. easyui 节省了开发产品的时间和规模. easyui 非常简单,但是功能非常强大. 先给大家展示效果图:

Entity Framework 简单增删改操作

原文:Entity Framework 简单增删改操作 前言  在 Entity Framework 简单查询操作 中主要是学习了在Entity Framework中的几种不同模式的查询操作,现在主要来学习一下简单的增加.删除.修改操作. 增加 在EF中添加操作一般有两种方式:一是直接创建对象,然后调用"DbSet"的"Add()"方法进行添加:二是调用数据库上下文的"Entry()"方法并设置对应的状态.无论使用哪种方式最终一定要调用"

jQuery+json反射实现所有实体的增删改操作

那么,有三四十张表的话,前台表单是自动生成的.只不过生成的实体和数据库里的表名都是有规律可以 找的.还有操作实体的类,所以我只要通过前台把表单传过来.我就可以知道要反射到哪个实体,然后对实体 进行相应的赋值.再反射一个实体操作的类.就可以实现对实体的增删改操作了 上面是我的数据库表名 下面是我的实体,和实体操作的类名 private void InsertAndUpdateObj(HttpContext context) { string ClassName = context.Request.

javascript实现表格增删改操作实例详解

 本文实例讲述了javascript实现表格增删改操作的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 6

xml dtd-目的:使用java或C#或JSP或ASP等完成对xml文件的增删改操作。

问题描述 目的:使用java或C#或JSP或ASP等完成对xml文件的增删改操作. XML SPY和相关的环境 实验内容自己设计一个小型系统,要求数据存在XML文件中.使用java或C#或JSP或ASP等完成对xml文件的增删改操作.要求有用户操作的界面. (如通讯录管理系统.日志管理系统.班级管理系统等)实验步骤 使用dtd或schema完成所要设计系统的数据设计,并生成相应的xml存储文档.使用高级语言编写系统代码,完成对xml文档的操作 解决方案 有做好的例子吗?能发给我一份吗?谢谢谢谢.

sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解

问题描述 sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解 我在C#的winform的DataGridView中显示联合查询的结果,下面就是4张表的联合查询的语句,我需要在DataGridView显示的表中做删除操作,只需要知道删除的sql语句就行,用存储过程也好,级联删除也好,希望详细,我已经在这个问题上困扰很久了,万分感谢! 解决方案 在做C#桌面程序时,我们通常会遇到删除dataGridview中选中的一和或都多行数据,在网上查了好多方法,有些只能删除dataGridv