Qt中QTableWidget用法总结
QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。
1 #include <QtGui/QApplication> 2 #include <QTableWidget> 3 #include <QTableWidgetItem> 4 5 int main(int argc, char *argv[]) 6 { 7 QApplication a(argc, argv); 8 QTableWidget *tableWidget = new QTableWidget(10,5); // 构造了一个QTableWidget的对象,并且设置为10行,5列 9 // 也可用下面的方法构造QTableWidget对象10 // QTableWidget *tableWidget = new QTableWidget;11 // tableWidget->setRowCount(10); //设置行数为1012 // tableWidget->setColumnCount(5); //设置列数为513 tableWidget->setWindowTitle("QTableWidget & Item");14 tableWidget->resize(350, 200); //设置表格15 QStringList header;16 header<<"Month"<<"Description";17 tableWidget->setHorizontalHeaderLabels(header);18 tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));19 tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));20 tableWidget->setItem(2,0,new QTableWidgetItem("Mar"));21 22 tableWidget->setItem(0,1,new QTableWidgetItem(QIcon("images/IED.png"), "Jan's month"));23 tableWidget->setItem(1,1,new QTableWidgetItem(QIcon("images/IED.png"), "Feb's month"));24 tableWidget->setItem(2,1,new QTableWidgetItem(QIcon("images/IED.png"), "Mar's month"));25 tableWidget->show();26 27 return a.exec();28 }
一. 对QTableWidget本身的效果实现
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. 表格表头的显示与隐藏
对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置:
1 tableWidget->verticalHeader()->setVisible(false); //隐藏列表头2 tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头
注意:需要 #include<QHeaderView>
5. 对表头文字的字体、颜色进行设置
1 QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象2 columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体3 columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色4 columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色
QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象 columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体 columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色 columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色注意:需要 #include<QHeaderView>
6. 在单元格里加入控件:
QTableWidget不仅允许把文字加到单元格,还允许把控件也放到单元格中。比如,把一个下拉框加入单元格,可以这么做:
1 QComboBox *comBox = new QComboBox();2 comBox->addItem("Y");3 comBox->addItem("N");4 tableWidget->setCellWidget(0,2,comBox);
二. 对单元格的进行设置
1. 单元格设置字体颜色和背景颜色 及字体字符
1 QTableWidgetItem *item = new QTableWidgetItem("Apple");2 item->setBackgroundColor(QColor(0,60,10));3 item->setTextColor(QColor(200,111,100));4 item->setFont(QFont("Helvetica"));5 tableWidget->setItem(0,3,item);
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. 设置单元格的大小
首先,可以指定某个行或者列的大小
1 tableWidget->setColumnWidth(3,200);2 tableWidget->setRowHeight(3,60);
tableWidget->setColumnWidth(3,200); tableWidget->setRowHeight(3,60);
还可以将行和列的大小设为与内容相匹配
1 tableWidget->resizeColumnsToContents();2 tableWidget->resizeRowsToContents();
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);//去掉自动滚动
转载于:https://www.cnblogs.com/elect-fans/archive/2012/03/21/2408566.html
Qt中QTableWidget用法总结相关推荐
- QT中QTableWidget清空或删除内容功能
今天使用到了QT中QTableWidget的清空和删除功能,特地整理出. 参考https://blog.csdn.net/qq_16093323/article/details/79226349 如下 ...
- Qt中QColor用法
QColor Qt关于QColor类的官方文档:https://doc.qt.io/qt-5.14/qcolor.html 一.简介 QColor为我们提供更多的颜色选择,如果只想用普通颜色,完全可以 ...
- Qt中QList用法详解
QList 列表指针的 释放 1,使用qDeleteAll() QList<T*> list: qDeleteAll(list): list = NULL; QList<T*> ...
- QT中的item views与Item widgets控件的用法总结
文章目录 0.前言 0.1 联系 0.2 区别 1.item views(以QTableView为例子) 2.item widgets(以QTableWidget为例子) 3.自定义 总结 0.前言 ...
- Qt中两种定时器用法
在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. 1.QObject类的定时器 QObj ...
- Qt中SQL QSqlQuery 对象中prepare() 函数的用法
Qt中利用SQL对数据库的操作和prepare()函数的使用 Qt数据库的初学说明 Qt中可以建立一个数据库,比如:QSqlDatabasedb:这是一个数据库对象db,在操作之前我们需要用QSQLI ...
- Qt下QTableWidget 基本用法
QTableWidget的基本设置 设置表头 ui->tableWidget->setColumnCount(11); ui->tableWidget->setRowCount ...
- QT中connect函数的几种用法详解总结
前言 信号与槽机制是QT非常核心的东西,通过信号与槽我们可以将不同的部分有机的结合起来,使得各个组件之间的交互简单高效,信号与曹槽像是设计模式中的观察者模式(我自己觉得是这样),只关心信号何时发来,以 ...
- QT中Model-View-Delegate委托代理机制用法介绍
文章目录 本地数据加载(Data) 添加数据模型(Model) 添加代理模型(Proxy) 添加元素的代理(Delegate) 添加视图层(View) 使用效果 之前的一篇文章中介绍过QT的委托代理机 ...
最新文章
- jemeter监听器的使用
- Python大神用的贼溜,9个实用技巧分享给你
- HTML中显示数学公式
- js中使用template.js插件
- axios get传参_axios 传数组或对象格式的参数用GET和POST的区别
- linux 逻辑卷扩展
- 登录样式:log4j 2,上下文,自动清理…全部不附带任何字符串!
- [oracle] 组织架构退格显示 connect by
- leetcode145. 二叉树的后序遍历 意想不到的骚操作
- c#中connect函数_C#.NET 各种连接字符串
- “征信修复”可信吗?企查查显示信用修复相关企业超1.7万家
- Mybatis3 源码解析系列
- 手撕Vue-Router
- java调用自身_Java有趣的自己调用自己
- linux ubuntu/centos相关收藏
- 固态硬盘用软件测试读不出来,为什么我测不出固态硬盘的官标性能值?
- cat <<EOF语句的意思
- 永久删除的文件还能找回来吗 永久删除的文件如何恢复
- 2021-2027全球与中国BFSI中的聊天机器人市场现状及未来发展趋势
- 网络爬虫playwright实现网站自动登录并签到
热门文章
- 关于如何在PSA众多请求号中查找数据是属于哪一条。
- 防止DISCUZ根域名跳转到forum.php的方法
- blender的汉化方法!
- 无线ap软件_无线WIFI网络干扰优化,不懂必看!新手在家里也能用的网络知识
- e3是合法浮点数吗_下列哪些是不合法的浮点数的选项是 123 2e4.2 .e5 -e3 .234 1e3
- Matlab repmat函数
- opencv的两个错误
- 全国计算机一级选择题汇总,全国计算机一级考试选择题训练及答案
- html显示和隐藏不占空间的是什么,css怎么设置不占用空间的隐藏?
- 2017年计算机三级网络技术试题,2017年计算机三级网络技术考前试题及答案(8)