一、界面与数据库连接,使用QSqlTableModel对数据处理
//界面初始化
void TestProSetWid::initsqlmodel()
{
// 连接SQLite数据库
db = QSqlDatabase::addDatabase("QSQLITE","second");
db.setDatabaseName("./testitem.db"); // 替换为你的数据库文件路径
if (!db.open()) {
qDebug() << "Failed to connect to database";
return;
}else
qDebug()<<"连接数据库成功"<<endl;
// 创建数据模型 /* QSqlQueryModel 适合用于查询数据,不能修改数据 */
dbmodel = new QSqlTableModel(this, db);
dbmodel->setTable("order_settings"); // 替换为你的表名 第一页订单号
/* 如果有修改则同步修改到数据库,
* 注意这个规则需要与 tabview 这样的控件才生效,
* 因为 tabview 可以直接编辑表里的内容 */
dbmodel->setEditStrategy(QSqlTableModel::OnFieldChange);
dbmodel->select();
// if(!dbmodel->select())
// qDebug()<<"err"<<endl;
mProxyModel = new QRowsLimitProxyModel;
mProxyModel->setSourceModel(dbmodel); //排序 筛选功能
mProxyModel->setDynamicSortFilter(true);
/* 设置表格的头信息,若不设置则显示数据库里的英文字段头信息 */
dbmodel->setHeaderData(dbmodel->fieldIndex("order_num"),
Qt::Horizontal, tr("订单"));
dbmodel->setHeaderData(dbmodel->fieldIndex("tested_product_type"),
Qt::Horizontal, tr("类型"));
dbmodel->setHeaderData(dbmodel->fieldIndex("inspect_unit"),
Qt::Horizontal, tr("单位"));
dbmodel->setHeaderData(dbmodel->fieldIndex("test_number"),
Qt::Horizontal, tr("编号"));
// 将查询结果绑定到TableView上
ui->tableView->setModel(mProxyModel);
// 设置内容居中显示
CenterAlignedDelegate *delegate = new CenterAlignedDelegate(this);
ui->tableView->setItemDelegate(delegate);
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 设置第一列的Stretch,将第一列的列宽设置为100像素
ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
ui->tableView->setColumnWidth(0, 100);
// ui->tableView->verticalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
// 设置行高
ui->tableView->verticalHeader()->setDefaultSectionSize(70); // 这里设置行高为50像素
ui->tableView->horizontalHeader()->setStyleSheet("font-size:16pt;");
// ui->tableView->setStyleSheet(setcolor);
ui->tableView->horizontalHeader()->setStyleSheet(setcolor);
ui->tableView->horizontalHeader()->setMinimumHeight(50);
ui->tableView->setSelectionMode(QAbstractItemView::ContiguousSelection);//多选
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);//选中行
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//不可编辑
// Commonstyle("tableView");
//计算当前数据库一共有多少页
updateTotalCount(mProxyModel->rowCount());
on_pagehome();
connect(ui->tableView->selectionModel(),SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),this,
SLOT(slotSelectChanged(const QItemSelection &, const QItemSelection &)));
}
二、创建弹窗控件,可以添加内容
//新建订单弹窗
void TestProSetWid::createdialog()
{
newOrderDialog = new QDialog(this);
newOrderDialog->setMinimumSize(500, 400);
newOrderDialog->setMaximumSize(500, 400);
newOrderDialog->setModal(true);
QGridLayout *orderLayout = new QGridLayout();
QHBoxLayout *btnLayout = new QHBoxLayout();
QVBoxLayout *mainLayout = new QVBoxLayout();
orderNumLabel = new QLabel("单号:");
typeLabel = new QLabel("类型:");
organizationLabel = new QLabel("单位:");
testNumLabel = new QLabel("编号:");
orderNumEdit = new QLineEdit();
typeEdit = new QLineEdit();
organizationEdit = new QLineEdit();
testNumEdit = new QLineEdit();
orderNumEdit->setReadOnly(true); //只读
orderNumLabel->setStyleSheet("color:white;");
typeLabel->setStyleSheet("color:white;");
organizationLabel->setStyleSheet("color:white;");
testNumLabel->setStyleSheet("color:white;");
orderNumEdit->setStyleSheet("background-color:white;" );
typeEdit->setStyleSheet("background-color:white;");
organizationEdit->setStyleSheet("background-color:white;");
testNumEdit->setStyleSheet("background-color:white;");
QFont font;
font.setFamily("宋体");
font.setPointSize(12);
font.setBold(true);
orderNumLabel->setFont(font);
typeLabel->setFont(font);
organizationLabel->setFont(font);
testNumLabel->setFont(font);
orderNumEdit->setFont(font);
typeEdit->setFont(font);
organizationEdit->setFont(font);
testNumEdit->setFont(font);
QPushButton *addBtn = new QPushButton("确认");
QPushButton *cancelBtn = new QPushButton("取消");
addBtn->setFixedSize(80,40);
cancelBtn->setFixedSize(80,40);
addBtn->setFont(font);
cancelBtn->setFont(font);
addBtn->setStyleSheet("background-color:rgb(48,176,226);border-radius:10px;");
cancelBtn->setStyleSheet("background-color:rgb(48,176,226);border-radius:10px;");
orderLayout->addWidget(orderNumLabel,0,0);
orderLayout->addWidget(orderNumEdit,0,1);
orderLayout->addWidget(typeLabel,1,0);
orderLayout->addWidget(typeEdit,1,1);
orderLayout->addWidget(organizationLabel,2,0);
orderLayout->addWidget(organizationEdit,2,1);
orderLayout->addWidget(testNumLabel,3,0);
orderLayout->addWidget(testNumEdit,3,1);
orderLayout->setVerticalSpacing(50);
btnLayout->addWidget(addBtn);
btnLayout->addWidget(cancelBtn);
mainLayout->addLayout(orderLayout);
mainLayout->addLayout(btnLayout);
mainLayout->setStretch(0,1);
mainLayout->setStretch(1,1);
newOrderDialog->setLayout(mainLayout);
connect(addBtn,SIGNAL(clicked()),this,SLOT(addbtn_clicked()));
connect(cancelBtn, &QPushButton::clicked, this, [=](){
// 关闭数据库的代码
productDialog->close();
});
}
与确认按钮链接槽函数
//弹窗新建订单确认按钮
void TestProSetWid::addbtn_clicked()
{
int row = dbmodel->rowCount();
/* 写入数据到数据库 */
dbmodel->insertRow(row);
dbmodel->setData(dbmodel->index(row, 0), orderNumEdit->text());
dbmodel->setData(dbmodel->index(row, 1), typeEdit->text());
dbmodel->setData(dbmodel->index(row, 2), organizationEdit->text());
dbmodel->setData(dbmodel->index(row, 3), testNumEdit->text());
dbmodel->submit();
/* 再确保提交 */
if (dbmodel->isDirty())
dbmodel->submitAll();
newOrderDialog->close();
updateTotalCount(dbmodel->rowCount());//当前页数函数
// ui->lineEdit_5->setText(QString("%1").arg(mTotalPage));
on_pageend();//返回尾页函数
}