QTableWidget 简单表格控件
!(https://file.mculoop.com/images/2022/11/2015-12-26_164722_1668589785.jpg )
## 创建表格
QTableWidget 是基于数据项(Item-based)的表格视图类。它提供了一种标准的表格数据显示模型(QTableWidgetItem),如果要自定义一种非标准的模型就要考虑使用 QTableView 了。
可以灵活地选择在构造表格的时候指定行数和列数,或者在构造以后再动态地调整他们。
<!--more-->
```cpp
tableWidget = new QTableWidget(12, 3, this);
或
tableWidget = new QTableWidget(this);
tableWidget->setRowCount(10);
tableWidget->setColumnCount(5);
```
## 单元格
QTableWidgetItem 是用于 QTableWidget 表格单元格的数据项类,它包含了文本、图标和复选框这几个常用的信息。向表格中加入的数据内容是以单元格的形式加入的,单元格是在表格的外部创建而后加入到指定单元格位置的。
```cpp
QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg( (row+1)*(column+1)));
tableWidget->setItem(row, column, newItem);
```
## 表头
使用 `void QTableWidget::setHorizontalHeaderLabels(const QStringList & labels)` 和 `void QTableWidget::setVerticalHeaderLabels(const QStringList & labels)` 可以便捷地给表格增加水平和垂直表头。由于表头可以看作是特殊的单元格,同样也可以像创建普通单元格那样先创建好再使用 `void QTableWidget::setHorizontalHeaderItem(int column, QTableWidgetItem * item)` 或 `void QTableWidget::setVerticalHeaderItem(int row, QTableWidgetItem * item)` 方法关联到表格。
## 其他一些常用的方法
`void QTableWidget::clear()` 清除所有包括表头在内的所有单元格(只清空内容item);
`void QTableWidget::clearContents()` 清除表头之外的单元格(只清空内容item);
`QList<QTableWidgetItem *> QTableWidget::findItems(const QString & text, Qt::MatchFlags flags) const` 查找单元格;
`void QTableWidget::insertColumn(int column)` 向表格中插入一个空列;
`void QTableWidget::insertRow(int row)` 向表格中插入一个空行;
`QTableWidgetItem * QTableWidget::item(int row, int column) const` 返回一个单元格数据项的指针,如果单元格没有设置数据项则返回 0;
`void QTableWidget::removeColumn(int column)` 移除指定列以及该列中的所有数据项;
`void QTableWidget::removeRow(int row)` 移除指定行以及该行中的所有数据项;
`void QTableWidget::setCellWidget(int row, int column, QWidget * widget)` 将一个指定的 QWidget 控件托管给表格,并显示在指定的单元格处。可以用向表格加入进度条、QLabel 等各种控件,扩大表格的适用范围;
## 测试程序
```cpp
#include <QApplication>
#include <QTableWidget>
#include <QDebug>
#include <QHeaderView>
#include <QScrollBar>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setApplicationName("查户口...");
QTableWidget w(0, 5); // 创建 0 行 5 列的表
//表头相关
QStringList tabTitle;
tabTitle << "姓名" << "性别" << "年龄" << "居住地" << "Blah Blah Blah";
w.setHorizontalHeaderLabels(tabTitle); //设置水平表头文字
QFont font("Microsoft YaHei UI", 12, QFont::Bold);
w.horizontalHeader()->setFont(font); //设置表头字体
w.horizontalHeader()->setDefaultSectionSize(100); //设置默认列宽
w.horizontalHeader()->resizeSection(4, 200); //设置表头第 5 列的宽度为200
//w.horizontalHeader()->setStretchLastSection(true); //设置充满表宽度
//w.verticalHeader()->setDefaultSectionSize(12); //设置默认行高
w.verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); //设置为根据内容自动调整行高
//w.verticalHeader()->setVisible(false); //设置垂直表头不可见,默认是显示行号
//单元格
//w.setShowGrid(false); //设置不显示格子线
//w.setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑
//选择相关
//w.setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为时每次选择一行
w.setSelectionMode(QAbstractItemView::SingleSelection); //设置为不可选择
//样式定义
w.horizontalScrollBar()->setStyleSheet("QScrollBar{background:transparent; height:15px;}"
"QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}"
"QScrollBar::handle:hover{background:gray;}"
"QScrollBar::sub-line{background:transparent;}"
"QScrollBar::add-line{background:transparent;}");
w.verticalScrollBar()->setStyleSheet("QScrollBar{background:transparent; width: 15px;}"
"QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}"
"QScrollBar::handle:hover{background:gray;}"
"QScrollBar::sub-line{background:transparent;}"
"QScrollBar::add-line{background:transparent;}");
w.horizontalHeader()->setStyleSheet("QHeaderView::section{\
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,\
stop:0 #616161, stop: 0.5 #505050,\
stop: 0.6 #434343, stop:1 #656565);\
color: white;\
padding-left: 4px;\
border: 1px solid #6c6c6c;}\
QHeaderView::section:checked{background-color: red;}\
/* style the sort indicator */\
QHeaderView::down-arrow {image: url(down_arrow.png);}\
QHeaderView::up-arrow {image: url(up_arrow.png);}"); //设置水平表头背景色
w.verticalHeader()->setStyleSheet("QHeaderView::section{background:#000;color:#fff;}"); //设置垂直表头背景色
w.setStyleSheet("selection-background-color:#B8DE6A;"); //设置选中背景色
//向表格写入数据
w.insertRow(0);
w.setItem(0, 0, new QTableWidgetItem("霄霄"));
w.setItem(0, 1, new QTableWidgetItem("女"));
w.setItem(0, 2, new QTableWidgetItem("123"));
w.setItem(0, 3, new QTableWidgetItem("天姥山"));
w.setItem(0, 4, new QTableWidgetItem("-_-|"));
w.insertRow(1);
w.setItem(1, 0, new QTableWidgetItem("风清扬"));
w.setItem(1, 1, new QTableWidgetItem("不详"));
w.setItem(1, 2, new QTableWidgetItem("250"));
w.setItem(1, 3, new QTableWidgetItem("峨眉山"));
w.setItem(1, 4, new QTableWidgetItem("-_-||| ~"));
w.insertRow(2);
w.insertRow(2);
w.insertRow(2);
w.insertRow(2);
w.insertRow(2);
w.insertRow(2);
w.show();
//w.clearContents();
return a.exec();
}
```
页:
[1]