QTableView 控件的简单使用

QTableView类提供了一个表视图的默认模型/视图实现。

一个QTableView实现一个表视图,它显示来自一个模型的项目。这个类用于提供以前由QTable类提供的标准表,但是使用Qt的模型/视图体系结构提供的更灵活的方法。

QTableView类是模型/视图类之一,也是Qt的模型/视图框架的一部分。

QTableView实现由q抽象视图类定义的接口,允许它显示由q抽象模型类派生的模型所提供的数据。

导航

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QCheckBox>
#include<QDebug>
#include<QCloseEvent>
#include<QMessageBox>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QStandardItemModel* Model = new  QStandardItemModel();
    //设置列的数量
    Model->setColumnCount(2);
    Model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("name"));
    Model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit("age"));
    //设置表格属性
    ui->tableView->setModel(Model);
    //表头信息显示居左
    ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
    //设置列宽
    ui->tableView->setColumnWidth(0,100);
    ui->tableView->setColumnWidth(1,100);

    //添加元素
    for(int i=0;i<10;i++)
    {
        Model->setItem(i,0,new QStandardItem(QString("名字%1").arg(i)));
        Model->setItem(i,1,new QStandardItem(QString("1%1").arg(i)));
    }
    //监视哪一行被修改
    connect(Model,&QStandardItemModel::itemChanged,[this](QStandardItem*item){
        qDebug()<<item->row()<<endl;
    });
    connect(ui->checkBox,&QCheckBox::stateChanged,[this](int state){
        qDebug()<<state<<endl;
        switch (state) {
        case Qt::Checked:
            qDebug()<<"被选中"<<endl;
            break;
        case Qt::Unchecked:
            qDebug()<<"取消选中"<<endl;
            break;
           case Qt::PartiallyChecked:
            qDebug()<<"未被完全选中"<<endl;
            break;
        default:
            break;
        }
    });
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    if(event->type()== QEvent::Close)
    {
        int ret = QMessageBox::question(this,tr("Are you sure it's closed?"),tr("Are you sure it's closed?"));
        if(ret == QMessageBox::Yes)
        {
            event->accept();
        }else
        {
            event->ignore();
        }
    }
}

最重实现效果:

 

posted @ 2018-01-18 13:36  轻风々  阅读(925)  评论(0编辑  收藏  举报