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);
}