一、鼠标悬浮在item上 显示提示信息

1、在构造函数开启table Widget控件的鼠标捕获功能

// 开启鼠标捕获功能(实现table widget的悬浮功能)
ui.tableWidget->setMouseTracking(true);

2、连接信号和槽

connect(ui.tableWidget, SIGNAL(    cellEntered(int, int)), this, SLOT(slotCellEntered(int, int)));

3、编写槽函数

void test10292::slotCellEntered(int r, int c)
{
QTableWidgetItem* item = ui.tableWidget->item(r, c);
if (item == nullptr)
{
return;
}
QToolTip::showText(QCursor::pos(), item->text());
}

二:点击表头实现排序

第二个是后实现的,按数值排序,因为Qt自带的排序是按 字段排序的

// 连接信号和槽
connect(ui.tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(sortHeader(int)));
// 实现槽函数
void test10292::sortHeader(int index)
{
if (index == )
{
ui.tableWidget->sortItems(index, Qt::DescendingOrder);
return;
}
ui.tableWidget->sortItems(index, Qt::AscendingOrder);
}
void test10292::sortHeader(int index)
{
if (index == || index == )
{
sortTableItem(index);
return;
}
ui.tableWidget->sortItems(index, Qt::AscendingOrder);
}
// 表头排序
void test10292::sortTableItem(int index)
{
int rowCountNum = ui.tableWidget->rowCount();
for (int i = rowCountNum - ; i >= ; i--)
{
for (int j = ; j < i; j++)
{
if (ui.tableWidget->item(j, index)->text().toInt() < ui.tableWidget->item(j + , index)->text().toInt())
{
QString str1 = ui.tableWidget->item(j + , )->text();
QString str2 = ui.tableWidget->item(j + , )->text();
QString str3 = ui.tableWidget->item(j + , )->text();
ui.tableWidget->item(j + , )->setText(ui.tableWidget->item(j, )->text());
ui.tableWidget->item(j + , )->setText(ui.tableWidget->item(j, )->text());
ui.tableWidget->item(j + , )->setText(ui.tableWidget->item(j, )->text());
ui.tableWidget->item(j, )->setText(str1);
ui.tableWidget->item(j, )->setText(str2);
ui.tableWidget->item(j, )->setText(str3);
}
}
}
}

三:拖拽item 实现两个item内容的互换

需要写一个类MyQTableWidget继承自QTableWidget,然后重写mousePressEvent和dropEvent事件处理函数

MyQTableWidget.h 文件

#ifndef MYQTABLEWIDGET_H
#define MYQTABLEWIDGET_H #include <QTableWidget>
#include <QMouseEvent>
#include <QDebug> class MyQTableWidget : public QTableWidget
{
Q_OBJECT public:
MyQTableWidget(QWidget *parent);
~MyQTableWidget(); private:
QString temp;
QPoint m_spos, m_dpos;
QTableWidgetItem* sitem;
QTableWidgetItem* ditem;
void mousePressEvent(QMouseEvent *event);
void dropEvent(QDropEvent *event);
}; #endif // MYQTABLEWIDGET_H

MyQTableWidget.cpp 文件

#include "MyQTableWidget.h"

MyQTableWidget::MyQTableWidget(QWidget *parent)
:QTableWidget(parent)
{
/******************** 实现表格控件拖拽item交换数据 ********************/
this->setDragDropMode(QAbstractItemView::DragDrop);
this->setDragEnabled(true);
this->setAcceptDrops(true);
//选中一个Item
this->setSelectionBehavior(QAbstractItemView::SelectItems);
} MyQTableWidget::~MyQTableWidget()
{ } void MyQTableWidget::mousePressEvent(QMouseEvent *event)
{
m_spos = event->pos();
sitem = new QTableWidgetItem();
sitem = QTableWidget::itemAt(m_spos);
if (sitem == NULL)
{
return;
}
temp = sitem->text();
QTableWidget::mousePressEvent(event);
} void MyQTableWidget::dropEvent(QDropEvent *event)
{
m_dpos = event->pos();
ditem = new QTableWidgetItem();
ditem = QTableWidget::itemAt(m_dpos);
if (ditem == NULL)
{
return;
}
sitem->setText(ditem->text());
ditem->setText(temp);
}

四:在 item 里面添加CheckBox控件

1、添加选择功能

QTableWidgetItem* item = new QTableWidgetItem();
item = new QTableWidgetItem();
item->setCheckState(Qt::Unchecked);
item->setText(QString::fromLocal8Bit("勾选"));
item->setBackgroundColor(QColor(0x00, 0xFF, 0x00));
ui.tableWidget->setItem(row, , item);

2、复选框选择事件处理

// 连接信号和槽
connect(ui.tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(stateChecked(int, int)));
// 实现槽函数
void test10292::stateChecked(int row, int column )
{
if (column == )
{
QTableWidgetItem* item = ui.tableWidget->item(row, column);
if (item != NULL)
{
if (item->checkState() == Qt::Checked)
{
// 选中红色
item->setBackgroundColor(QColor(0xFF, 0x00, 0x00));
}
else if (item->checkState() == Qt::Unchecked)
{
// 没选中绿色
item->setBackgroundColor(QColor(0x00, 0xFF, 0x00));
}
}
}
}

 五:插入复选框的第二种方法

QCheckBox* cb = new QCheckBox();
cb->setText(QString::fromLocal8Bit("易语言"));
ui.tableWidget->setCellWidget(row, , cb);

 六:其中一个item是CheckBox控件,拖拽实现交换两个item(包括控件交换)

主要是通过 item 的关联数据来实现, 插入数据的时候如果是控件关联数据设置为一个值,不是控件设置为另外一个值。然后在dropEvent()事件函数里面处理。

void test10292::AddData(const QString& id, const QString& name, int score)
{
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
// ID
QTableWidgetItem* item = new QTableWidgetItem();
item->setText(id);
item->setData(Qt::ToolTip, "");
ui.tableWidget->setItem(row, , item);
item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
// name
item = new QTableWidgetItem();
item->setText(name);
item->setData(Qt::ToolTip, "");
ui.tableWidget->setItem(row, , item);
item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
// score
item = new QTableWidgetItem();
item->setText(QString::number(score));
item->setData(Qt::ToolTip, "");
ui.tableWidget->setItem(row, , item);
item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
// 第四列插入复选框
/*QCheckBox* cb = new QCheckBox();
cb->setText(QString::fromLocal8Bit("易语言"));
ui.tableWidget->setCellWidget(row, 3, cb);*/
item = new QTableWidgetItem();
item->setCheckState(Qt::Unchecked);
item->setText(QString::fromLocal8Bit("勾选"));
item->setBackgroundColor(QColor(0x00, 0xFF, 0x00));
item->setData(Qt::ToolTip, "this is tooltip");
ui.tableWidget->setItem(row, , item);
}
#include "MyQTableWidget.h"

MyQTableWidget::MyQTableWidget(QWidget *parent)
:QTableWidget(parent)
{
/******************** 实现表格控件拖拽item交换数据 ********************/
this->setDragDropMode(QAbstractItemView::DragDrop);
this->setDragEnabled(true);
this->setAcceptDrops(true);
//选中一个Item
this->setSelectionBehavior(QAbstractItemView::SelectItems);
} MyQTableWidget::~MyQTableWidget()
{ } void MyQTableWidget::mousePressEvent(QMouseEvent *event)
{
m_spos = event->pos();
sitem = new QTableWidgetItem();
sitem = QTableWidget::itemAt(m_spos);
if (sitem == NULL)
{
return;
}
temp = sitem->text();
QTableWidget::mousePressEvent(event);
} void MyQTableWidget::dropEvent(QDropEvent *event)
{
m_dpos = event->pos();
ditem = new QTableWidgetItem();
ditem = QTableWidget::itemAt(m_dpos);
if (ditem == NULL)
{
return;
}
if (sitem->data(Qt::ToolTip).toString() == "this is tooltip" && ditem->data(Qt::ToolTip).toString() == "")
{
int r = sitem->row();
int c = sitem->column();
delete sitem;
QTableWidgetItem* itemTemp = new QTableWidgetItem();
itemTemp->setText(ditem->text());
itemTemp->setData(Qt::ToolTip, "");
// 文本背景色设置为白色
itemTemp->setBackgroundColor(QColor(0xFF, 0xFF, 0xFF));
itemTemp->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
this->setItem(r, c, itemTemp); ditem->setText(temp);
ditem->setCheckState(Qt::Unchecked);
ditem->setData(Qt::ToolTip, "this is tooltip");
ditem->setBackgroundColor(QColor(0x00, 0xFF, 0x00));
}
else if (sitem->data(Qt::ToolTip).toString() == "this is tooltip" && ditem->data(Qt::ToolTip).toString() == "this is tooltip")
{
sitem->setText(ditem->text());
ditem->setText(temp);
}
else if (sitem->data(Qt::ToolTip).toString() == "" && ditem->data(Qt::ToolTip).toString() == "this is tooltip")
{
sitem->setText(ditem->text());
sitem->setCheckState(Qt::Unchecked);
sitem->setData(Qt::ToolTip, "this is tooltip");
sitem->setBackgroundColor(QColor(0x00, 0xFF, 0x00)); int r = ditem->row();
int c = ditem->column();
delete ditem;
QTableWidgetItem* itemTemp = new QTableWidgetItem();
itemTemp->setText(temp);
itemTemp->setData(Qt::ToolTip, "");
// 文本背景色设置为白色
itemTemp->setBackgroundColor(QColor(0xFF, 0xFF, 0xFF));
itemTemp->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
this->setItem(r, c, itemTemp);
} QTableWidget::dropEvent(event);
}

Qt Table Widget常用操作的更多相关文章

  1. QT 一些非常常用的操作

    一   如果在窗体关闭前自行判断是否可关闭二   如何用打开和保存文件对话框  三   如何使用警告.信息等对话框  四   在Windows下Qt里为什么没有终端输出五   想在源代码中直接使用中文 ...

  2. Qt数据库 QSqlTableModel实例操作(转)

    本文介绍的是Qt数据库 QSqlTableModel实例操作,详细操作请先来看内容.与上篇内容衔接着,不顾本文也有关于上篇内容的链接. Qt数据库 QSqlTableModel实例操作是本文所介绍的内 ...

  3. 第32课 Qt中的文件操作

    1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...

  4. mysql常用操作语句

    mysql常用操作语句 1.mysql -u root -p   2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...

  5. Oracle常用操作——创建表空间、临时表空间、创建表分区、创建索引、锁表处理

    摘要:Oracle数据库的库表常用操作:创建与添加表空间.临时表空间.创建表分区.创建索引.锁表处理 1.表空间 ■  详细查看表空间使用状况,包括总大小,使用空间,使用率,剩余空间 --详细查看表空 ...

  6. R语言Data Frame数据框常用操作

    Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列有列名,每一行也可 ...

  7. DBA必备:MySQL数据库常用操作和技巧

    DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...

  8. Qt学习笔记常用容器

    主要说Qt的以下几种容器 1.QList<T> 2.QLinkedList<T> 3.Map<T> 和一些常用的容器方法的使用 qSort qCopy qFind ...

  9. [转]Mysql命令行常用操作

    Mysql命令行常用操作 一.从命令行登录MySQL数据库服务器 1.登录使用默认3306端口的MySQL /usr/local/mysql/bin/mysql -u root -p 2.通过TCP连 ...

随机推荐

  1. NFS的安装与使用

    一.服务器端: 1.1安装NFS服务: #执行以下命令安装NFS服务器, #apt会自动安装nfs-common.rpcbind等13个软件包 sudo apt install nfs-kernel- ...

  2. ISO/IEC 9899:2011 条款6.10——预处理指示符

    6.10 预处理指示符 语法 1.preprocessing-file: groupopt group: group-part group    group-part group-part: if-s ...

  3. html页面自适应宽度

    html页面实现响应式的方式有很多,本篇介绍懒人必备一招见效的方法. 在head标签中加入 <meta name="viewport" content="width ...

  4. SpringBoot入门-概念(一)

    SpringBoot是什么 Spring boot是一个构建在Spring框架之上.以一种更加简单快捷的方式来配置和运行web应用程序的开源框架. 为什么用SpringBoot 可以解决普通的java ...

  5. 顶部导航TabBar、TabBarView、DefaultTabController

    原文地址:https://www.cnblogs.com/upwgh/p/11369537.html TabBar:Tab页的选项组件,默认为水平排列. TabBarView:Tab页的内容容器,Ta ...

  6. QT中常用工具总结

    1.qmake 利用.pro文件生成Makefile 命令为: eg: qmake -o Makefile hello.pro 2. uic 利用ui界面审查.h头文件 命令为: eg: uic go ...

  7. [译]如何根据Pandas中的列名获取列所在的index位置?

    原文来源:https://stackoverflow.com/questions/13021654/get-column-index-from-column-name-in-python-pandas ...

  8. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4: install (default-install) on project authorizationManagement-service: Failed to install metadata com.dmsdbj.itoo:autho

    今天在打包时遇到这个问题: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4: inst ...

  9. LeetCode的一道题引申的python实现的对字符串进行分词,提取词频的方法

    在LeetCode上刷一道题,题目如下: 3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的?最长子串?的长度. 示例?1: 输入: "abcabcbb"输出 ...

  10. pymysql DAO简单封装

    #!/usr/bin/env python # -*-coding:utf-8 -*- # # 无法执行多个query,self.conn.close()放在CdbConn类的单独函数中,每次quer ...