欢迎访问mehome的博客

Tomorrow is another day.
Fork me on GitHub

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. 方法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类关联菜单及处理。

头文件添加

  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));


五、相关参考

posted @ 2022-03-04 00:24  mehome  阅读(366)  评论(0编辑  收藏  举报