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