成果展示
已实现功能:
- 可导入mysql中所有表格数据
- 可使用搜索按钮查找表名或参数
- 可使用多选框实现单个、多个以及全部参数显示
- 可对表格进行增改删查
主要代码
- 数据库导入功能
//导入数据
void MainWindow::on_pushButton_import_clicked()
{
ui->treeWidget->clear();//清空树形窗口
QString cmd = "show tables;";//显示所有表
QSqlQuery query(cmd);
//获取所有表名,并添加顶层结点
while (query.next())
{
QString biaoming=query.value(0).toString().trimmed();//获取表名
allbiaoming << biaoming;//将单个表名加入表名数组
qDebug() << "table name:" << biaoming;//打印表名
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0,query.value(0).toString());//设置顶层结点
item->setCheckState(0,Qt::Unchecked);//默认未选中
ui->treeWidget->addTopLevelItem(item);
//设置子节点
QString selectsql="show columns from %1";//获取所有列
QSqlQuery selectquery(selectsql.arg(biaoming));
int j=0;
while(selectquery.next())
{
allcanshu<<selectquery.value(0).toString();//添加项
if(j>2)//此段为特殊操作,我所处理的表格参数,我只需要取第三列及以后的表头
{
qDebug() <<"参数名为"<<allcanshu.at(j);
QTreeWidgetItem *childitem=new QTreeWidgetItem(item,QStringList(allcanshu.at(j)));
childitem->setCheckState(0,Qt::Unchecked);//添加
}
j++;
}
}
}
2、搜索按钮查找表名或参数
void MainWindow::on_toolButton_clicked()
{
QString search = ui->lineEdit->text();//获取搜索框中的内容
QTreeWidgetItemIterator it(ui->treeWidget);//获取树形窗口的所有子项
while(*it)
{
//将子项与搜索框文本比较,不区分大小写
if(QString::compare((*it)->text(0),search,Qt::CaseInsensitive))
{
//不满足满足条件先隐藏,它的子项目满足条件时会再次让它显示
(*it)->setHidden(true);
}
else
{
(*it)->setHidden(false);
QTreeWidgetItem *item = *it;
//显示父节点
while (item->parent())
{
item->parent()->setHidden(false);
item = item->parent();
}
}
++it;
}
ui->treeWidget->expandAll();//展开所有符合的所有节点
}
3、多选框实现单个、多个以及全部参数显示
void MainWindow::childrenclicked(QTreeWidgetItem* item)
{
QString filtername=item->text(0).trimmed();//获取节点名,子节点时为参数名,父节点时为表格名
//将表名数列拿来与节点名一一比较,如果表格名(父节点)被选中,则表示全选
for(int i=0;i<allbiaoming.count();i++)
{
if(QString::compare(filtername,allbiaoming.at(i),Qt::CaseSensitive))//返回0表示相等,区分大小写
;
else
showtable=true;//全选标志位
}
if(showtable)//全选
{
if(item->checkState(0))//checkbox未选中为0,半选1,全选2
{
qDebug()<<"用户选择了父节点"<<filtername;
mymodel->setTable(filtername);
mymodel->select();
ui->tableView->setModel(mymodel);//显示整张表
showtable=false;
}
else
{
//清空tableview
model->clear();
ui->tableView->setModel(model);
}
}
else//未全选,多选及单选
{
int columncount=model->columnCount();
qDebug()<< columncount;//当前列
QString filtertable=item->parent()->text(0).trimmed();//子节点时为表格名,父节点时为空
if(item->checkState(0)) //选中状态
{
qDebug()<<"用户选择了子节点"<<filtername;
QString filtersql="select %1.`%2` from %1";//筛选结果
QSqlQuery filterquery(filtersql.arg(filtertable).arg(filtername));
QList<QStandardItem*> items;
while(filterquery.next())
{
QString value = filterquery.value(0).toString();//单个数据值
qDebug() <<"单个数据值"<<value;
QStandardItem *item = new QStandardItem(value);//QStandardItem是存储数据的单元格,它存储的是QString
items<<item;
}
model->appendColumn(items);//插入列
model->setHorizontalHeaderItem(columncount,new QStandardItem(filtername));//设置表头
}
else//未被选中,删除未选中列
{
int columncount=model->columnCount();
qDebug() <<"当前有列:"<<columncount;
for(int j = 0; j < columncount; j++) // 遍历每一个单元格(列)
{
QVariant currenttext=model->headerData(j,Qt::Horizontal);
if(QString::compare(filtername,currenttext.toString(),Qt::CaseSensitive));
else
model->takeColumn(j);
}
}
ui->tableView->setModel(model);//表视图,用于显示
}
}
4、增改删查
//增加一行,表格可修改
void MainWindow::on_pushButton_modify_clicked()
{
ui->tableView->setEditTriggers(QAbstractItemView::DoubleClicked);//设置为双击可修改
int rowNum = mymodel->rowCount(); //获得表的行数
int id = rowNum+1;
mymodel->insertRow(rowNum); //添加一行
mymodel->setData(mymodel->index(rowNum,0),id);
}
//删除按钮
void MainWindow::on_pushButton_delete_clicked()
{
int curRow = ui->tableView->currentIndex().row();
mymodel->removeRow(curRow);
int ok = QMessageBox::warning(this,tr("提示:"),tr("你确定"
"删除当前行吗? "),QMessageBox::Yes,QMessageBox::No);
if(ok == QMessageBox::No)
{
mymodel->revertAll(); //如果不删除,则撤销
}
else
mymodel->submitAll(); //否则提交,在数据库中删除该行
}
小结
1、checkbox的三态
2、 相关的sql语句
(1)show tables
(2)show columns from 表名
(3)select 表名.`字段名’ from 表名
注意:如果表头中有括号或者有特殊符号,要加上反引号,具体看下列链接
https://blog.csdn.net/weixin_43424867/article/details/118210268
代码下载
链接:https://pan.quark.cn/s/7f16aece6ef4
提取码:CetH