C++ QT5学习笔记 2020.9.14(combox添加选项可被编辑,lineedit初始值、灰色提示、限制输入为0-99,sql条件查询结果显示在table widget中,清除表格数据)

44 篇文章 8 订阅

1、comboBox添加选项:

    ui->comboBox->addItem("1");
    ui->comboBox->addItem(u8"全部");   //中文
    comboBoxdata=ui->comboBox->currentText();    //comboBox返回的文本
    ui->comboBox->setEditable(true);  //可被编辑

2、lineEdit使用:

ui->lineEdit->setText("12");  //为lineEdit设置初始值
ui->lineEdit->setPlaceholderText("12");   //lineEdit显示文本(灰色),但不作为值输入
ui->lineEdit->setValidator(new QIntValidator(0,99,this));   //为lineEdit设置只只能输入int,0-99

3、将sql输出的结果插入到table widget中

先将上次写的数据库代码改改:

//在mainwindow.h中加入sql库
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QSqlError>
//在mainwindow.h中并声明函数
void InsertSelect(QSqlQuery sql_query,int k);
//在mainwindow.cpp中写函数功能
void MainWindow::InsertSelect(QSqlQuery sql_query,int k)
{   //这里我用了11个属性
    QString  date= sql_query.value(0).toString();
    QString  time= sql_query.value(1).toString();
    QString rollnm = sql_query.value(2).toString();
    QString  coordinate= sql_query.value(3).toString();
    QString x=sql_query.value(4).toString();
    QString y=sql_query.value(5).toString();
    QString classify=sql_query.value(6).toString();
    QString level=sql_query.value(7).toString();
    QString Graydifference=sql_query.value(8).toString();
    QString area=sql_query.value(9).toString();
    QString lengthofwidth=sql_query.value(10).toString();
    
    ui->tableWidget->setItem(k,0,new QTableWidgetItem(date));
    ui->tableWidget->item(k, 0)->setTextAlignment(Qt::AlignCenter); //居中对齐
    ui->tableWidget->setItem(k,1,new QTableWidgetItem(time));
    ui->tableWidget->item(k, 1)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,2,new QTableWidgetItem(rollnm));
    ui->tableWidget->item(k, 2)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,3,new QTableWidgetItem(coordinate));
    ui->tableWidget->item(k, 3)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,4,new QTableWidgetItem(x));
    ui->tableWidget->item(k, 4)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,5,new QTableWidgetItem(y));
    ui->tableWidget->item(k, 5)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,6,new QTableWidgetItem(classify));
    ui->tableWidget->item(k, 6)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,7,new QTableWidgetItem(level));
    ui->tableWidget->item(k, 7)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,8,new QTableWidgetItem(Graydifference));
    ui->tableWidget->item(k, 8)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,9,new QTableWidgetItem(area));
    ui->tableWidget->item(k, 9)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(k,10,new QTableWidgetItem(lengthofwidth));
    ui->tableWidget->item(k, 10)->setTextAlignment(Qt::AlignCenter);
}

查询按钮功能:

//mainwindow.h中声明
void pushbtn();
//mainwindow.cpp绑定信号槽
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(pushbtn()));
//mainwindow中写功能
void MainWindow::pushbtn()
{       //连接数据库
    QSqlDatabase database;
    database = QSqlDatabase::addDatabase("QSQLITE");
    database.setHostName("localhost");//设置你本地服务器的IP
    database.setDatabaseName("E://database/MyDataBase.db");  //注意:数据库文件写出绝对地址才能保存下来
    database.setUserName("root");  //用户名
    database.setPassword("123");
    if (!database.open())
     {
       qDebug() << "Error: Failed to connect database." << database.lastError();
       }
    else
     {
       qDebug() << "Succeed to connect database." ;
       }

    QSqlQuery sql_query;

    sql_query.exec("select count(*)  from add1");
    if(sql_query.first())
    {
        int rownm=sql_query.value(0).toInt();
        ui->tableWidget->setRowCount(rownm);       //设置表格行数
    }

    sql_query.exec("select * from add1");
    if(!sql_query.exec())
     {
       qDebug()<<sql_query.lastError();
       }
    else
     { int k=0;
       while(sql_query.next())
         {
           MainWindow::InsertSelect(sql_query,k);
           k+=1;
       }}

    //结束数据库操作
    sql_query.finish();
    //关闭数据库
    database.close();
       }

看看效果:
点击查询前:
在这里插入图片描述

点击查询后:
在这里插入图片描述

4、将查询条件也做进去

想法:将查询结果做到临时表中,再做全表查询,使用上述方法显示到tablewidget中。
模拟个初始的:

//将上方的查询语句改为
sql_query.exec("select count(*)  from (select * from add1 where classify='2') as add1");
//和
sql_query.exec("select * from (select * from add1 where classify='2') as add1");

执行结果:

在这里插入图片描述

改进一下:

    QString sql="select * from add1 where classify='2'";
    QString rowsql="select count(*)  from ("+sql+") as add1";     //监控输出结果行数
    QString datasql="select * from ("+sql+") as add1";        //监控输出结果数据
    //table widget行数
    sql_query.exec(rowsql);
    if(sql_query.first())
    {
        int rownm=sql_query.value(0).toInt();
        ui->tableWidget->setRowCount(rownm);       //设置表格行数
    }
    //table widget数据
    sql_query.exec(datasql);
    if(!sql_query.exec())
     {
       qDebug()<<sql_query.lastError();
       }
    else
     { int k=0;
       while(sql_query.next())
         {
           MainWindow::InsertSelect(sql_query,k);
           k+=1;
       }}

那么只要把核心的查询代码写在SQL中就行了。

将comboBox的返回值应用到查询语句中
做以下修改:

    QSqlQuery sql_query;
    QString rollnmBox=ui->comboBox->currentText();
    if (rollnmBox==u8"全部"){
        rollnmBox="not in ('')";}
    else {
        rollnmBox="in ("+rollnmBox+")";
    }
    QString classifyBox=ui->comboBox_2->currentText();
    if (classifyBox==u8"全部"){
        classifyBox="not in ('')";}
    else {
        classifyBox="in ("+classifyBox+")";
    }
    QString levelBox=ui->comboBox_3->currentText();
    if (levelBox==u8"全部"){
        levelBox="not in ('')";}
    else{
        levelBox="in ("+levelBox+")";
    }

    //qDebug() <<levelBox+u8"全部";
    QString sql="select * from add1 where rollnm "+rollnmBox+" and classify "+classifyBox+" and level "+levelBox;
    QString rowsql="select count(*)  from ("+sql+") as add1";
    QString datasql="select * from ("+sql+") as add1";        //监控输出结果数据
    //table widget行数
    sql_query.exec(rowsql);
    if(sql_query.first())
    {
        int rownm=sql_query.value(0).toInt();
        ui->tableWidget->setRowCount(rownm);       //设置表格行数
    }
    //table widget数据
    sql_query.exec(datasql);
    if(!sql_query.exec())
     {
       qDebug()<<sql_query.lastError();
       }
    else
     { int k=0;
       while(sql_query.next())
         {
           MainWindow::InsertSelect(sql_query,k);
           k+=1;
       }}

结果:
在这里插入图片描述
nice!

5、清除表格数据

void MainWindow::clear()
{
    ui->tableWidget->setRowCount(0);
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值