Qt在tabelview控件中画一张表格 并且做 增 删 改 查 的操作

Qt在tabelview控件中画一张表格

1.画表格

我的是一个mainwindow.ui 点击屏幕后 跳转至measresult.ui 显示出来的
如图被单击:
Qt在tabelview控件中画一张表格 并且做 增 删 改 查 的操作_第1张图片
mainwindow.h 头文件:

public:
    //构造函数
    explicit MainWindow(QWidget *parent = 0);
    //析构函数
    ~MainWindow();
    //设定虚函数
    virtual void mouseReleaseEvent(QMouseEvent *event); //鼠标事件

mainwindow.cpp 代码:单击代码()

/*
 * 2.鼠标单击按钮 显示窗口
**/
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
   int wd,hi,x,y;
   if(event->button() == Qt::LeftButton){
       wd = this->geometry().width();   //获取当前界面宽度并赋值
       hi = this->geometry().height(); //获取当前页面高度并赋值
       x = event->pos().x();           //鼠标所在X位置
       y = event->pos().y();            //鼠标所在Y位置
       //在按钮所在的窗口区域触发
        if(y>120){
            //弹出新的窗口 
            MeasResult result;
            result.exec();
       }
   }
}

对应的measresult.h头文件:

#include 
#include 
#include 

measresult.cpp源文件:

#include 
#include 
#include 

MeasResult::MeasResult(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MeasResult)
{
    ui->setupUi(this);

    //提供了用于存储自定义数据的通用模型
        QStandardItemModel *model = new QStandardItemModel(4,6);
//        model->setHeaderData(0,Qt::Horizontal,tr("第一列"));
//        model->setHeaderData(1,Qt::Horizontal,tr("第二列"));
//        model->setHeaderData(2,Qt::Horizontal,tr("第三列"));
//        model->setHeaderData(3,Qt::Horizontal,tr("第四列"));
//        model->setHeaderData(4,Qt::Horizontal,tr("第五列"));
//        model->setHeaderData(5,Qt::Horizontal,tr("第六列"));
        //插入数据
            model->insertRows(0,1); //插入第一行
            model->setData(model->index(0,0), tr("产品型号")); //插入第一列 
            model->setData(model->index(0,1), tr("电压结果"));
            model->setData(model->index(0,2), tr("电压判定"));
            model->setData(model->index(0,3), tr("电流结果"));
            model->setData(model->index(0,4), tr("电流判定"));
            model->setData(model->index(0,5), tr("结果判定"));
            model->insertRows(1,1); //插入第二行
            model->setData(model->index(1,0), qrand()%1000+1000); //插入第二列 插入一个1000-2000的随机数
            model->setData(model->index(1,1), qrand()%1000+1000);
            model->setData(model->index(1,2), qrand()%1000+1000);
            model->setData(model->index(1,3), qrand()%1000+1000);
            model->setData(model->index(1,4), qrand()%1000+1000);
            model->setData(model->index(1,5), qrand()%1000+1000);
            model->insertRows(2,1); //插入第三行
            model->setData(model->index(2,0), tr("结果判定"));
            model->setData(model->index(2,1), tr("电压上限"));
            model->setData(model->index(2,2), tr("电压下限"));
            model->setData(model->index(2,3), tr("电流上限"));
            model->setData(model->index(2,4), tr("电流下限"));
            model->setData(model->index(2,5), tr("通道数"));
            model->insertRows(3,1); //插入第四行
            model->setData(model->index(3,0), qrand()%1000+1000);
            model->setData(model->index(3,1), qrand()%1000+1000);
            model->setData(model->index(3,2), qrand()%1000+1000);
            model->setData(model->index(3,3), qrand()%1000+1000);
            model->setData(model->index(3,4), qrand()%1000+1000);
            model->setData(model->index(3,5), qrand()%1000+1000);
        ui->tableView->horizontalHeader()->setVisible(false);//显示或隐藏表头
        ui->tableView->verticalHeader()->setVisible(false);//显示或隐藏序列行

        ui->tableView->setAutoScroll(false);//自动滚动条
        //ui->tableView->resizeColumnsToContents(); //根据内容调整大小
        ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//根据容器调整大小
        ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//只读
        ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选中模式为选中行
        ui->tableView->setSelectionMode( QAbstractItemView::SingleSelection); //设置选中单行
        ui->tableView->setModel(model); //使用
}

效果如下:
Qt在tabelview控件中画一张表格 并且做 增 删 改 查 的操作_第2张图片

2. 增 就用上面的insertRows() 函数来实现即可

当然  如果往后续增 可以先获取总行数 
int rowCount = tableView-> model()-> rowCount();
然后皆可以累加行数了
3. 删
void ParamSetting::on_deleteTestProject_clicked()
{
	int curRow;                                 //被选中的行
    QModelIndex index = ui->showTestProjectTableView->currentIndex();       //被选中行的的数据信息

    //1.获取需要操作的基本信息   
    curRow = tableViewCurrentIndex();
    
    //2.1新建按钮
    QPushButton *okbtn = new QPushButton(tr("确定"));
    QPushButton *cancelbtn = new QPushButton(tr("取消"));
    //2.2新建提示框
    QMessageBox *mymsgbox = new QMessageBox;
    //2.3将补全提示框信息
    mymsgbox->setIcon(QMessageBox::Warning);
    mymsgbox->setWindowTitle(tr("提示"));
    mymsgbox->setText(tr("是否删除检查项目:"));
    mymsgbox->addButton(okbtn, QMessageBox::AcceptRole);
    mymsgbox->addButton(cancelbtn, QMessageBox::RejectRole);
    mymsgbox->show();       //展示提示框
    mymsgbox->exec();       //将对话框显示为模态对话框

    //3 是否做删除操作
    if (mymsgbox->clickedButton() == okbtn)//点击了OK按钮
    {
        //3.1删除一条信息
        ui->showTestProjectTableView->model()->removeRow(curRow);
        //3.1.2页面删除后 数据库对应信息也删除*************
    }
    else{
        qDebug() << "取消删除";
        //3.2.1不做操作
    }
 }

这样就可以实现删除某行信息了
Qt在tabelview控件中画一张表格 并且做 增 删 改 查 的操作_第3张图片

4.改

直接在表格上修改即可 , 或者怕误操作 ,设置为不可编辑模式(上面的只读),设置编辑按钮,点击编辑后把只读关闭,修改完毕后再改回来。
(如果涉及数据库的操作,修改后对应的行进行修改即可)

谢谢观看 一起学习 [email protected]

5.TableView的行数和列数

今天准备尝试做文件的导出,需要用到行数、列数,找了一圈没找到是什么,就依次看函数,终于找到了。

         //QTablewidget 获取数据的列数
//         int columnCount=tableWidget->columnCount();
         int columnCount = ui->tableView->model()->columnCount();
          //QTableView 获取数据的行数
         int rowCount=ui->tableView->model()->rowCount();

这样就可以获取到你当前表格的行数和列数了。

你可能感兴趣的:(qt)