一、用途
- 列表显示内容
二、常用显示及数据操作功能
2.1常用设置
- 最后一列设置
1 //隐藏最后空列,有标题最后一行自动拉伸
2 ui.QTableWidget->horizontalHeader()->setStretchLastSection(true);
- 列宽自动拉伸
1
2 //初始化表格间距
3 ui.QTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
- 点击选择和编辑
//选择整行
ui.QTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
/*
QAbstractItemView::SelectItems 0 Selecting single items.选中单个单元格
QAbstractItemView::SelectRows 1 Selecting only rows.选中一行
QAbstractItemView::SelectColumns 2 Selecting only columns.选中一列
*/
//只选择一行
ui.QTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
/*
QAbstractItemView::NoSelection 不能选择
QAbstractItemView::SingleSelection 选中单个目标
QAbstractItemView::MultiSelection 选中多个目标
QAbstractItemView::ExtendedSelection
QAbstractItemView::ContiguousSelection
最后两个的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选
*/
//设置双击不编辑
ui.QTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
/*
相关参数:
QAbstractItemView::NoEditTriggers 0 不能对表格内容进行修改
QAbstractItemView::CurrentChanged 1 任何时候都能对单元格修改
QAbstractItemView::DoubleClicked 2 双击单元格
QAbstractItemView::SelectedClicked 4 单击已选中的内容
QAbstractItemView::EditKeyPressed 8 Editing starts when the platform edit key has been pressed over an item.
QAbstractItemView::AnyKeyPressed 16 按下任意键就能修改
QAbstractItemView::AllEditTriggers 31 以上条件全包括
*/
//悬停显示
ui.QTableWidget->setMouseTracking(true);
- 隐藏列号/标题行
//隐藏列表头
ui.QTableWidget->verticalHeader()->setVisible(false);
//隐藏行表头
ui.QTableWidget->horizontalHeader()->setVisible(false);
- 行列高宽
//指定行或者列的大小
ui.QTableWidget->setColumnWidth(3,200);
ui.QTableWidget->setRowHeight(3,60);
//将行和列的大小设为与内容相匹配
ui.QTableWidget->resizeColumnsToContents();
ui.QTableWidget->resizeRowsToContents();
- 表格合并
//从第1行第2列位置,向右2列向下3行,合并成一个表格
//第一二个参数是合并的起始表格位置
ui.tableWidget->setSpan(0, 1, 3, 2);
2.2数据插入
- 插入一个元素
QTableWidgetItem *item = new QTableWidgetItem("Apple");
//背景颜色
item->setBackgroundColor(QColor(0,60,10));
//文字颜色
item->setTextColor(QColor(200,111,100));
//字体
item->setFont(QFont("Helvetica"));
//插入第一行,第四列位置
ui.QTableWidget->setItem(0,3,item);
注意:设置QTableWidget所有表格字体:ui.QTableWidget->setFont(QFont("Helvetica"));
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
- 插入数据对齐
item->setTextAlignment()
/*水平对齐
Qt::AlignLeft 0x0001 居左
Qt::AlignRight 0x0002 居右
Qt::AlignHCenter 0x0004 居中
Qt::AlignJustify 0x0008 两端对齐
*/
/*垂直对齐
Qt::AlignTop 0x0002 顶端对齐
Qt::AlignBottom 0x0004 底端对齐
Qt::AlignVCenter 0x0080 中间对齐
Qt::AlignBaseline 0x0100
*/
- QComboBox插入
//插入下拉插件
QComboBox *comBox = new QComboBox();
comBox->addItem("Y");
comBox->addItem("N");
ui.QTableWidget->setCellWidget(0,2,comBox);
2.3列表清空
三、左键及右键菜单
3.1左键点击处理
槽函数:
//实时消息点击行选择;
//ui文件tableWidget控件名称:tableWidget_currentMsg
void on_tableWidget_currentMsg_clicked(const QModelIndex &index);
具体的处理:
void MyClass::on_tableWidget_currentMsg_clicked(const QModelIndex &index)
{
int selectRow = index.row();
}
3.2右键菜单显示及相关处理
方法:方法有两种
- 方法1:setContextMenuPolicy设置,connect链接信号customContextMenuRequested和右键处理函数
- 方法2:通过ui类重载实现contextMenuEvent(QContextMenuEvent *event)方法,
3.2.1方法1,信号槽关联实现
方法1步骤:
- tableWidget所在ui类中添加QMenu、QAction成员(指针或对象);
- tableWidget所在ui类的构造函数中通过ui.tableWidget调用setContextMenuPolicy函数;
- tableWidget所在ui类的构造函关联右键菜单信号和处理函数
- 第三步处理函数显示对应右键菜单,及关联右键菜单及菜单响应处理,也可以在tableWidget所在ui类关联菜单及处理。
头文件添加
//添加头文件
#include <QMenu>
#include <QAction>
//添加成员,此处指针,也可以用对象
QAction *mp_delet;
QAction *mp_export;
QMenu *mp_menu;
//右键菜单显示槽函数
private slots:
//tableWidget右键菜单
void TableWidgetGropAddrMenuRequested(QPoint pos);
构造函数添加
//菜单对象创建
mp_menu = new QMenu(this);
mp_menu->setWindowFlags(mp_menu->windowFlags() | Qt::FramelessWindowHint);
mp_delet = mp_menu->addAction(QString("退出此组"));
mp_export = mp_menu->addAction(QString("撤销此组"));
//关联QtableWidget
//tableWidget_goupAddr:qtablewidget对象
//TableWidgetGropAddrMenuRequested:右键处理
//右键每个菜单需要单独关联
ui.tableWidget_goupAddr->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui.tableWidget_goupAddr, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(TableWidgetGropAddrMenuRequested(QPoint)));
//右键菜单具体点击处理的关联
connect(mp_delet, SIGNAL(triggered()), this, SLOT(on_action_delet_triggered()));
connect(mp_export, SIGNAL(triggered()), this, SLOT(on_action_export_triggered()));
右键显示
void ComManager::TableWidgetGropAddrMenuRequested(QPoint pos)
{
QTableWidgetItem *item = ui.tableWidget_goupAddr->itemAt(pos);
//connect(mp_delet, SIGNAL(triggered()), this, SLOT(on_action_delet_triggered()));
//connect(mp_export, SIGNAL(triggered()), this, SLOT(on_action_export_triggered()));
if (item != NULL)
{
qDebug() << "row" << item->row(); //当前行
QPoint p = ui.tableWidget_goupAddr->viewport()->mapToGlobal(pos);
mp_menu->popup(p);
//mp_menu->clear(); //清除原有菜单
//mp_menu->addAction(mp_delet);
//mp_menu->addSeparator();
//菜单出现的位置为当前鼠标的位置
//mp_menu->exec(QCursor::pos());
}
}
3.2.1重载实现
注意:内部tableWidget控件Item的获取方法:
void SqliteTest::contextMenuEvent(QContextMenuEvent *event)
{
QPoint point = event->pos();
//注意需要用两个位置相减才是当前item在tableWidget的位置
QPoint tp = ui.tableWidget->pos();
QTableWidgetItem *it = ui.tableWidget->itemAt(point-tp);
}
四、插入各种控件及背景颜色
4.1插入复选框
//创建Item对象
//设置复选框,同时设置默认状态未选中
//插入行
//插入到指定单元格
QTableWidgetItem *it = new QTableWidgetItem;
it->setCheckState(Qt::Unchecked);
//获取当前行数量
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
ui.tableWidget->setItem(row, 0, it);
4.2插入QPushButton
QTableWidgetItem *it = new QTableWidgetItem;
it->setCheckState(Qt::Unchecked);
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
ui.tableWidget->setItem(row, 0, it);
ui.tableWidget->setCellWidget(row, 1, new QPushButton);
4.3插入QComboBox
QTableWidgetItem *it = new QTableWidgetItem;
it->setCheckState(Qt::Unchecked);
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
ui.tableWidget->setItem(row, 0, it);
ui.tableWidget->setCellWidget(row, 1, new QPushButton);
ui.tableWidget->setCellWidget(row, 2, new QComboBox);
4.4插入文本字体设置
函数:ui.tableWidget->item(row, 0)->setFont(font);
QString txt = "This is Text";
QFont font;
font.setPixelSize(16);
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
ui.tableWidget->setItem(row, 0, new QTableWidgetItem(txt));
ui.tableWidget->item(row, 0)->setFont(font);
4.5插入文本颜色设置
函数:ui.tableWidget->item(row, 0)->setTextColor(QColor(255,0, 255));
QString txt = "This is Text";
QFont font;
font.setPixelSize(16);
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
ui.tableWidget->setItem(row, 0, new QTableWidgetItem(txt));
ui.tableWidget->item(row, 0)->setFont(font);
ui.tableWidget->item(row, 0)->setTextColor(QColor(255,0, 255));
4.6插入单元格背景颜色设置
函数:ui.tableWidget->item(row, 0)->setBackgroundColor(QColor(0,255,255));
QString txt = "This is Text";
QFont font;
font.setPixelSize(16);
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
ui.tableWidget->setItem(row, 0, new QTableWidgetItem(txt));
ui.tableWidget->item(row, 0)->setFont(font);
ui.tableWidget->item(row, 0)->setTextColor(QColor(255,0, 255));
ui.tableWidget->item(row, 0)->setBackgroundColor(QColor(0,255,255));
文章转自博客园(mehome):Qt控件-QTableWidget相关 - mehome - 博客园
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓