网站首页 > 技术文章 正文
QTableWidget能满足大部分需求,但有时我们需要给QTableWidget增加一些小功能:
部分效果图:
1、可以在表头中增加checkbox,方法如下:
①、可以引用头文件scheckboxheaderview.h
#ifndef SCHECKBOXHEADERVIEW_H
#define SCHECKBOXHEADERVIEW_H
#include <QtGui>
#include <QPainter>
#include <QHeaderView>
#include <QStyleOptionButton>
#include <QStyle>
class SCheckBoxHeaderView : public QHeaderView
{
Q_OBJECT
private:
bool isChecked;
int m_checkColIdx;
public:
SCheckBoxHeaderView( int checkColumnIndex, Qt::Orientation orientation, QWidget * parent = 0) :
QHeaderView(orientation, parent) {
m_checkColIdx = checkColumnIndex;
isChecked = false;
}
signals:
void checkStausChange(bool);
protected:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const {
painter->save();
QHeaderView::paintSection(painter, rect, logicalIndex);
painter->restore();
if (logicalIndex == m_checkColIdx) {
QStyleOptionButton option;
int width = 10;
for (int i=0; i<logicalIndex; ++i)
width += sectionSize( i );
option.rect = QRect(3, 5, 21, 21);
if (isChecked)
option.state = QStyle::State_On;
else
option.state = QStyle::State_Off;
this->style()->drawControl(QStyle::CE_CheckBox, &option, painter);
}
}
void mousePressEvent(QMouseEvent *event) {
if (visualIndexAt(event->pos().x()) == m_checkColIdx) {
isChecked = !isChecked;
this->updateSection(m_checkColIdx);
emit checkStausChange(isChecked);
}
QHeaderView::mousePressEvent(event);
}
};
#endif // SCHECKBOXHEADERVIEW_H
②、引用并使用
m_checkHeader = new SCheckBoxHeaderView(0, Qt::Horizontal, this);
this->setHorizontalHeader(m_checkHeader); // 这个this指针的父为QTableWidget
connect(m_checkHeader, &SCheckBoxHeaderView::checkStausChange, [=](bool check){
qDebug() << "is:" <<check;
});
2、在表格中设置某列(或某行)的最小(或最大)大小
QTableWidget提供了setColumnWidth()和setRowHeight()两个方法来设置某列(或某行)大小
QHeaderView提供了sectionResized信号,它的参数是这样的:void sectionResized(int logicalIndex, int oldSize, int newSize);
我们可以自建类(也可以直接用上述的1中我建好的类),然后继承(或组合)QHeaderView类,然后通过信号与槽来做处理,这里提供了一个方法。
这里以设置某列最小值为例:
bool m_min = false;
int m_minColumn = 0;
int m_minWidth = 20;
// m_checkHeader 为上述1中建好的类
connect(m_checkHeader, &SCheckBoxHeaderView::sectionResized, [=](int logicalIndex, int
oldSize, int newSize){
if(m_min) {
if(m_minColumn == logicalIndex) {
if(newSize < m_minWidth) {
this->setColumnWidth(m_minColumn, m_minWidth);
}
}
}
});
void setColumnMinWidth(int column, int width) {
this->setColumnWidth(column, width);
m_min = true;
m_minWidth = width;
m_minColumn = column;
}
3、显示表格线 (QTableWidget提供了此方法)
setShowGrid(true);
4、设置表格内容不可编辑(QTableWidget提供了此方法)
setEditTriggers(QAbstractItemView::NoEditTriggers);
5、设置表格内表头字体加粗或者怎样,这里以加粗为例
QFont font = this->horizontalHeader()->font();
font.setBold(true);
this->horizontalHeader()->setFont(font); // 这个this指针的父为QTableWidget
6、设置表头背景色
this->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;}"); // 这个this指针的父为QTableWidget
7、设置表格列宽均等分
this->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//使列完全填充并平分
8、设置表格某单元块内容,主要是QTableWidget的setCellWidget方法,用法可以参考下面的:
STableWidgetItem* title = new STableWidgetItem(row, QSize(wid - 1, 29),this);
title->setText(str);
title->setDeleteVisible(delVisible);
this->setCellWidget(row, i, title);
这里STableWidgetItem类是我自己创建的QWidget,可以自己添加QWidget中的内容,比如复选框、按钮等
9、表格单元格内字体居中 QTableWidgetItem
QTableWidgetItem* item = new QTableWidgetItem(str);
item->setTextAlignment(Qt::AlignCenter);
this->setItem(row, i, item); // 这个this指针的父为QTableWidget
STableWidgetItem* title = new STableWidgetItem(row, QSize(wid - 1, 29),this);
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
- 上一篇: Qt样式表:QSS名词解释 qt样式表字体
- 下一篇: Qt样式表-详解 qt样式css
猜你喜欢
- 2024-10-20 Qt 开发经验总结 qt软件开发
- 2024-10-20 Qt QTableWidget用法总结 qtablewidget qtableview
- 2024-10-20 实战PyQt5: 068-MV框架中的项视图部件
- 2024-10-20 Qt开发经验小技巧231-235 qt开发入门简介
- 2024-10-20 Python+PyQt5进阶(5) pyqt5 django
- 2024-10-20 Qt项目升级到Qt6经验总结 qt更新界面
- 2024-10-20 QTableWidget表格中增删数据 qtablewidget清空表格
- 2024-10-20 C/C++ Qt StatusBar 底部状态栏应用
- 2024-10-20 Qt的常用控件 qt控件详解
- 2024-10-20 Python PyQt5通过QTableWidget表格控件操作SQLite数据库
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)