QTableView类实现表格视图,QTableView的数据由继承QAbstractItemModel的子类models来提供。
1.使得QTableView的大小和主窗口大小一致
//获得主窗口的大小
int width = this->width();
int height = this->height();
//调整tableView窗口大小和主窗口一致
ui->tableView->resize(width,height);
2.表格网格线的显示与取消
//背景网格线设置
//显示
ui->tableView->setShowGrid(true);
//取消
//ui->tableView->setShowGrid(false);
3.网格线画笔
//网格背景画笔
//ui->tableView->setGridStyle(Qt::DashLine);
ui->tableView->setGridStyle(Qt::DotLine);
画笔的种类如下:
常量 | 值 | 描述 |
Qt::NoPen | 0 | 无线 |
Qt::SolidLine | 1 | 实线 |
Qt::DashLine | 2 | 虚线 |
Qt::DotLine | 3 | 点线 |
Qt::DashDotLine | 4 | 虚点线 |
Qt::DashDotDotLine | 5 | 虚点点线 |
Qt::CustomDashLine | 6 | 自定义虚线 |
4.排序功能,设置了排序功能为true,就会开启列排序功能
//排序功能
ui->tableView->setSortingEnabled(true);
5.设置列表头
默认的表头都是按数字顺序自增的,我们可以设置表头为自己的格式,这时我们就要使用到model了
比如,我们要实现自己的表头
QStandardItemModel* model = new QStandardItemModel();
QStringList labels = QObject::trUtf8("频率,功率,误差").simplified().split(",");
model->setHorizontalHeaderLabels(labels);
ui->tableView->setModel(model);
ui->tableView->show();
效果如下:
6.实现各表内容的填充
QStandardItemModel* model = new QStandardItemModel();
QStringList labels = QObject::trUtf8("频率,功率,误差").simplified().split(",");
model->setHorizontalHeaderLabels(labels);
//定义item
QStandardItem* item = 0;
for(int i = 0;i < 10;i++){
item = new QStandardItem(QString("%1").arg(i));
model->setItem(i,0,item);
item = new QStandardItem(QString("%1").arg(i*2));
model->setItem(i,1,item);
item = new QStandardItem(QString("%1").arg(i*3));
model->setItem(i,2,item);
}
ui->tableView->setModel(model);
ui->tableView->show();
实现效果如下:
由上图可知,网格线的实现采用Qt::DotLine,但是内容区的字体颜色为什么是红色的呢?这就是下一个所要说的
7.数据清除
model->clear();
8.Qt中关于CSS样式的使用
ui->tableView->setStyleSheet("QTableView { border: none;"
"selection-background-color: #8EDE21;"
"color: red}");
其中的“color:red”即是设置表格内容的字体颜色
“border: none”表示表格无边框
“selection-background-color: #8EDE21”表示选中单元格背景色的设置。
其他样式表可以参看HTML中的CSS。