QTableView的设置比较复杂,做项目的时候总是搞忘,以本文记录一下它的样式、布局等设置方式。
目录
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);