Qt控件-QTableWidget相关

一、用途

  • 列表显示内容

二、常用显示及数据操作功能

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. 方法1:setContextMenuPolicy设置,connect链接信号customContextMenuRequested和右键处理函数
  2. 方法2:通过ui类重载实现contextMenuEvent(QContextMenuEvent *event)方法,

3.2.1方法1,信号槽关联实现

方法1步骤:

  1. tableWidget所在ui类中添加QMenu、QAction成员(指针或对象);
  2. tableWidget所在ui类的构造函数中通过ui.tableWidget调用setContextMenuPolicy函数;
  3. tableWidget所在ui类的构造函关联右键菜单信号和处理函数
  4. 第三步处理函数显示对应右键菜单,及关联右键菜单及菜单响应处理,也可以在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模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值