天天看点

Qt之QTableView的使用

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 无线
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();
           

效果如下:

Qt之QTableView的使用

6.实现各表内容的填充

QStandardItemModel* model = new QStandardItemModel();
    QStringList labels = QObject::trUtf8("频率,功率,误差").simplified().split(",");
    model->setHorizontalHeaderLabels(labels);

    //定义item
    QStandardItem* item = ;
    for(int i = ;i < ;i++){
        item = new QStandardItem(QString("%1").arg(i));
        model->setItem(i,,item);
        item = new QStandardItem(QString("%1").arg(i*));
        model->setItem(i,,item);
        item = new QStandardItem(QString("%1").arg(i*));
        model->setItem(i,,item);
    }
    ui->tableView->setModel(model);
    ui->tableView->show();
           

实现效果如下:

Qt之QTableView的使用

由上图可知,网格线的实现采用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。

继续阅读