QTableView的设置比较复杂,做项目的时候总是搞忘,以本文记录一下它的样式、布局等设置方式。
目录
- 1、设置item布局
- 1.1、平均铺满
- 1.2、最后一项铺满
- 2、交替背景色
- 2.1、行交替
- 2.2、项交替
- 3、去掉选中虚线
- 4、去掉网格线
- 5、设置选中方式
- 5.1、选中单个项目
- 5.2、选中单行
- 5.3、选中单列
- 6、样式设置
- 7、文字居中
- 8、设置图标
- 9、表头样式设置
- 9、总结
1、设置item布局
1.1、平均铺满
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
1.2、最后一项铺满
ui->tableView->horizontalHeader()->setStretchLastSection(true);
在ui设计师也能设置。
2、交替背景色
2.1、行交替
ui->tableView->setAlternatingRowColors(true);
交替色可以通过样式表来设置。
QTableView::item:!alternate:!selected{background: yellow;
}QTableView::item:alternate:!selected{background: green;
}
2.2、项交替
Qt没有提供项背景色交替的方法,需要自行实现,下面是一个例子。
auto model = new QStandardItemModel;
model->setRowCount(3);
model->setColumnCount(3);
for (int r = 0; r < 3; ++r) {for (int c = 0; c < 3; ++c) {auto index = model->index(r, c);if ((!(r % 2) && c % 2) || (r % 2 && !(c % 2))) {model->setData(index, QColor(243, 243, 243), Qt::BackgroundRole);} else {model->setData(index, QColor(Qt::white), Qt::BackgroundRole);} model->setData(index, "aaa"); }
}
ui->tableView->setModel(model);
3、去掉选中虚线
ui->tableView->setFocusPolicy(Qt::NoFocus);
4、去掉网格线
ui->tableView->setShowGrid(false);
5、设置选中方式
5.1、选中单个项目
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
5.2、选中单行
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
5.3、选中单列
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
6、样式设置
为了方便辨识,用一些简单显眼的颜色来写例子。
QTableView { border: 1px solid red;background: black;color: white;font-size:18px;
}QTableView::item {border: 2px solid blue;
}QTableView::item:selected {background-color: green;color: yellow;
}
7、文字居中
文字居中需要一个个item设置。
model->setData(index, Qt::AlignCenter, Qt::TextAlignmentRole);
8、设置图标
图标需要一个个item设置。
model->setData(index, QIcon("a.png"), Qt::DecorationRole);
9、表头样式设置
QHeaderView {height: 40px;
}QHeaderView::section { /* 表头的项 */background: red;border: none;
}
9、总结
最后把这些常用的设置都粘贴到一起,方便复制使用。
ui->tableView->setFocusPolicy(Qt::NoFocus);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableView->setShowGrid(false);
ui->tableView->setAlternatingRowColors(true);
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// ui->tableView->horizontalHeader()->setStretchLastSection(true);
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);