QTableWidget类提供了一种基于条目(item)的表格视图模型,在该部件中数据以item为基本单位,每条数据(item)对应一个QTableWidgetItem类的对象,所有数据形成的item组成整个表格。接下来我们创建一个用来显示学生信息的表格,以此为例说明TableWidget的一些常用功能。
1.创建QTableWidget
首先创建studentInfo类,然后在Qt Desinger模式下创建一个QTableWidget部件,对其命名为stuTableWidget。通过在该部件上点击右键创建列项表头,创建完毕后也就同时指定了该表格的列项数。如下:
2.初始化
除了直接在设计模式下创建行数和列数外,我们还可以通过调用相应的方法来设定。比如我们通过setRowCount方法在studentInfo类的构造方法中即可指定行项数。
ui->stuTableWidget->setRowCount(30);
该方法在创建行的同时会自动创建一个用来显示行号的列项,如下:
如果我们的表格只用来显示信息,并不涉及对相应信息的修改,则可以通过下述方法将表格设置为只读模式:
ui->stuTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
setEditTriggers()是QAbstractItemView类中的一个方法,通过向该方法传递相应的参数以设置item的一些属性,比如NoEditTriggers参数可将item设置为只读,DoubleClicked代表双击时item可修改。而QTableWidget继承了QAbstractItemView方法,因此它可以使用该函数。
3.信息显示
表格视图中数据的获取随用途的不同而不同。如果使用于C/S模型的客户端,那么表格中的信息需要从服务器端发送到本地,再相应解析;如果使用在数据库中,则需要从数据库中获取相应信息。这里假定数据已经到达本地,我们通过下面的方法来显示数据信息。
void studentInfo::showInfo()
QTableWidgetItem *tmpItem;
tmpItem = new QTableWidgetItem(QString("04065061"));
ui->stuTableWidget->setItem(0, 0, tmpItem);
tmpItem = new QTableWidgetItem(QString("edsionte"));
ui->stuTableWidget->setItem(0, 1, tmpItem);
tmpItem = new QTableWidgetItem(QString("1988.01.28"));
ui->stuTableWidget->setItem(0, 2, tmpItem);
tmpItem = new QTableWidgetItem(QString("male"));
ui->stuTableWidget->setItem(0, 3, tmpItem);
tmpItem = new QTableWidgetItem(QString("Xi'an Institute of Posts and Telecommunications"));
ui->stuTableWidget->setItem(0, 4, tmpItem);
上述的showInfo方法为第一行设定了相应信息,我们可以看到表格的一行中每个具体的列项都对应一个QTableWidgetItem对象,并通过在setItem方法中指定行号和列号将该item对象设置到表格的具体位置。在上述的showInfo方法中,我们分别通过该方法创建了第一行的第一到第五列的数据(行列下表从0开始)。
4.为表格数据添加右键菜单
有时候我们想通过点击鼠标右键对表格数据进行一些其他操作,比如复制、查看详情等,我们可以按照下面的方法来实现。为了实现点击右键弹出菜单这个功能,我们必须在类studentInfo类中声明一个菜单变量popMenu和一个菜单选项变量action。
class studentInfo : public QMainWindow
private:
Ui::studentInfo *ui;
QMenu *popMenu;
QAction *action;
private slots:
void on_stuTableWidget_customContextMenuRequested(QPoint pos);
声明完毕后,我们在studentInfo类的构造函数中对其进行初始化,如下:
ui->stuTableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
popMenu = new QMenu(ui->stuTableWidget);
action = new QAction("Copy", this);
setContextMenuPolicy方法用来设置widget菜单项的显示方法,而CustomContextMenu是唯一与邮件菜单有关的参数,因此这里我们将菜单显示方法设置为该类型。如果widget设置为CustomContextMenu时,当在数据上点击右键时就会发送customContextMenuRequested ( const QPoint & pos )信号,该信号还会捕捉到点击右键的位置,并用pos参数来存储。与此信号关联的槽函数我们定义如下:
void studentInfo::on_stuTableWidget_customContextMenuRequested(QPoint pos)
popMenu->addAction(action);
popMenu->exec(QCursor::pos());
我们首先将菜单选项action添加到邮件弹出菜单popMenu中,再通过exec方法在pos()位置显示该邮件菜单,pos()返回的位置即为点击鼠标的位置。
现在,如果点击右键菜单选项并不会发生任何动作,这是因为我们并没有关联相应的槽函数。由于具体的菜单选项不同,其函数的实现也不同,这里我们只给出框架,如下:
void studentInfo::rightClickedOperation()
//do something
定义好槽函数,最关键的是与相应的信号连接。对于上述两个槽函数,我们可以使用两种方法进行信号和槽的关联:在Qt Desinger模式下添加或手动进行connect关联。对于customContextMenuRequested信号,我们使用前种方法实现信号和槽的关联;对于右键菜单选项的功能实现,我们可以通过connect函数实现,如下:
connect(action, SIGNAL(triggered()), this, SLOT(rightClickedOperation()));
上一篇: 分治算法之快速排序 下一篇: 对/proc文件系统进行读写操作
关于我 - 132,776 views内核新手区 - 63,668 viewsHello,Kernel! - 45,937 viewsmalloc()之后,内核发生了什么? - 45,613 views线程的那些事儿 - 40,292 views你的第一个中断程序! - 35,054 views使用grep查找指定目录下的关键字 - 33,540 viewsprintf到printk的转变 - 33,521 views使用vim+ctags+cscope阅读内核源码 - 31,537 viewslist.h头文件分析(1) - 30,844 views内存管理的那些事儿 - 30,686 viewsUbuntu下编译3.0.4内核 - 29,834 views等待队列源码分析 - 29,330 views对Makefile、Kconfig与.config文件的再次理解 - 29,129 viewsQTableWidget基本功能总结 - 28,484 views基于Qt的多窗口编程-界面的设计 - 25,477 viewsLinux下CPU的利用率 - 25,280 views中断下半部-tasklet - 24,670 views进程在Linux内核中的角色扮演 - 23,545 viewsLinux下的socket编程-基于Qt的客户端 - 23,205 views
审计系统在内核的实现-基本框架
open()在Linux内核的实现(6)-打开操作分析
open()在Linux内核的实现(5)-符号链接目录项的处理
open()在Linux内核的实现(4)-普通目录项的处理
open()在Linux内核的实现(3)-“.”和“..”的处理
open()在Linux内核的实现(2)-路径查找
open()在Linux内核的实现(1)-基本实现
open()在Linux内核的实现-准备工作
在VMware10中为Solaris11.1安装图形界面
通过call_usermodehelper()在内核态执行用户程序
Linux内核中通过文件描述符获取绝对路径
Linux内核文件系统挂载分析
CFS中的虚拟运行时间
Cgroup简介-资源控制的实现
Cgroup简介-子系统与层级
Cgroup简介-概述
Linux下CPU的利用率
Linux下访问文件的基本模式
文件操作函数在VFS层的实现
页缓存概述
C语言的那些事儿 (15)
GUI开发 (8)
Linux下C编程 (38)
Linux内核源码分析 (81)
内存管理 (19)
文件系统 (11)
Linux内核编程 (3)
Linux容器技术 (1)
netlink编程 (3)
POSIX线程技术 (2)
Python入门 (1)
Shell学习笔记 (14)
开发技术 (6)
性能隔离 (2)
技术杂谈 (5)
操作系统 (1)
算法分析 (5)
系统性能与优化 (1)
网络协议栈 (1)
网络编程 (8)
计算机体系结构 (1)
进程间通信 (8)
驱动开发 (5)
2015年7月 (1)
2015年4月 (1)
2015年3月 (2)
2015年2月 (2)
2015年1月 (2)
2014年5月 (1)
2014年3月 (2)
2014年2月 (1)
2013年4月 (2)
2013年3月 (3)
2012年12月 (1)
2012年11月 (1)
2012年10月 (1)
2012年9月 (2)
2012年8月 (4)
2012年7月 (2)
2012年6月 (5)
2012年5月 (3)
2012年4月 (3)
2012年3月 (8)
2012年2月 (2)
2012年1月 (4)
2011年12月 (3)
2011年11月 (5)
2011年10月 (7)
2011年9月 (6)
2011年8月 (4)
2011年7月 (5)
2011年6月 (4)
2011年5月 (5)
2011年4月 (7)
2011年3月 (7)
2011年2月 (7)
2011年1月 (9)
2010年12月 (6)
2010年11月 (10)
2010年10月 (20)
2010年9月 (14)
2010年8月 (16)
2010年7月 (12)
2010年6月 (7)