QT篇之QT与数据库交互

接上一篇文章 QT篇之QT布局与设计师
这篇讲QT和数据库的交互,数据库用的MySQL,驱动是我用的官方例子再编译的,如何编译可以看我的这篇文章 QT编译MySQL驱动/QT连接MySQL
贴连接操作代码:
//连接数据库
void ConnectDataBase::conDataBase()
{
    db = QSqlDatabase::addDatabase("QMYSQL");  //连接的MYSQL的数据库驱动
    db.setHostName("127.0.0.1");      //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
    db.setPort(3306);                    //端口
    db.setDatabaseName("minedemo");          //数据库名
    db.setUserName("******");              //用户名
    db.setPassword("******");            //密码
    db.open();
    //测试连接
    if(!db.open()){
        qDebug()<<"the connection to database is failed"<<'\n';
        return ;
    }
    else{
         qDebug()<<"the connection to database is successful"<<'\n';
    }
}

//释放连接
void ConnectDataBase::close()
{
    db.close();
}

问题:
1.前端如何与数据交互?
解决:视图+模型
QT中的模型/视图机制内容还是比较多的,我不在这里叙述,有兴趣的可以专门了解一下这块的内容,我个人看的是霍亚飞的Qt creator快速入门第三版,内容简单详细
项目运行截图:

在这里插入图片描述

我在这里贴一下项目需要的功能:
1.获取view某行某列的具体数值
代码如下:
//在UI上显示数据库数据
void Widget::showTable()
{
    QSqlQueryModel * model = new QSqlQueryModel(this);
    model->setQuery("select * from basicdata");
    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("能量/J"));
    model->setHeaderData(5,Qt::Horizontal,tr("震级"));
    ui->dataBaseView->verticalHeader()->setVisible(false);     //禁止显示列标头
   // ui->tableView_2->sortByColumn(0,Qt::AscendingOrder);     //按列排序,升序
    ui->dataBaseView->setSelectionMode(QAbstractItemView::SingleSelection);
    ui->dataBaseView->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->dataBaseView->setModel(model);

    QAbstractItemModel *itemModel = ui->dataBaseView->model();
    QModelIndex itemIndex = itemModel->index(0,1);            //定位到事件1,获取其时间
    QVariant data = itemModel->data(itemIndex);
    ui->lastestIncidentLabel->setText("最新事件:"+data.toString());
}

下面是我摘取的一部分:
    QModelIndex tempIndex = ui->dataBaseView->model()->index(row,3);             //获取CAD定位点
    QVariant data = ui->dataBaseView->model()->data(tempIndex);
    QStringList list = data.toString().split(",");
    for(int i=0;i<list.size();i++){
        coordinates[i] = list.at(i).toDouble();
    }
    qDebug()<<"the current coordinate is :"<<coordinates[0]<<" "<<coordinates[1]<<" "<<coordinates[2];

控制台输出如下:
the current coordinate is : 4.15181e+07   4.59539e+06   22.776
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Not found

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值