ui->tableView升序

在这里插入图片描述

亮点

 //设置可排序
   ui->tableView->setSortingEnabled(true);
   ui->tableView->sortByColumn(0,Qt::AscendingOrder);      //排序
void Widget::initTable()
{
   //设置焦点策略:
    ui->tableView->setFocusPolicy(Qt::NoFocus);
    //显示网格线:
   ui->tableView->setShowGrid(true);
   //设置垂直滚动条策略:
    ui->tableView->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
   //设置水平滚动条策略:
    ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);

   // ui->tableView->verticalHeader()->hide();
    //选择模式,单选
   ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
  //选择行为,选一整行
   ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);

   //标题头空域左右拉伸
   ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); //设置可拉伸
   //显示网格
   ui->tableView->setShowGrid(true);
   //交替行的颜色
   ui->tableView->setAlternatingRowColors(true);
   //设置选中的单元格高亮
   ui->tableView->horizontalHeader()->setHighlightSections(true);

    //设置水平标题列宽
   ui->tableView->horizontalHeader()->resizeSection(0,100);
   ui->tableView->horizontalHeader()->resizeSection(1,100);
   ui->tableView->horizontalHeader()->resizeSection(2,100);
   ui->tableView->horizontalHeader()->resizeSection(3,100);
   ui->tableView->horizontalHeader()->resizeSection(4,100);

   // 设置默认行高
   // 按第0列升序排序
   ui->tableView->verticalHeader()->setDefaultSectionSize(40);

   //设置可排序
   ui->tableView->setSortingEnabled(true);
   ui->tableView->sortByColumn(0,Qt::AscendingOrder);      //排序


}
void equipment_home::on_kreall_clicked() //整理库数据 { // 2. 加载所有设备完整记录 QList<data::Equipment::fullEquipmentRecord> records = data::Equipment::loadFullEquipmentRecords(); // 3. 按 "item" 字段升序排序( "item" 对应设备名称 "name" 字段) // 使用 Qt 的字符串比较(支持本地化,类似Excel排序) std::sort(records.begin(), records.end(), [](const data::Equipment::fullEquipmentRecord& a, const data::Equipment::fullEquipmentRecord& b) { return QString::localeAwareCompare(a.name, b.name) < 0; // 升序排列 }); // 4. 将排序后的数据展示到 tableView // 清空原有数据 QStandardItemModel* model = qobject_cast<QStandardItemModel*>(ui->tableView->model()); if (!model) { model = new QStandardItemModel(this); // 设置表头(仅首次初始化时设置) model->setHorizontalHeaderLabels({ "ID", "设备名称", "状态","创建时间","类别名称" }); ui->tableView->setModel(model); } model->removeRows(0, model->rowCount()); // 清空旧数据 //填充排序后的数据 for (const auto& rec : records) { QList<QStandardItem*> items; items << new QStandardItem(QString::number(rec.id)) // ID << new QStandardItem(rec.name) // 设备名称(排序字段) << new QStandardItem(rec.status) // 状态 << new QStandardItem(rec.inDate.toString("yyyy-MM-dd hh:mm:ss")) // 创建时间 << new QStandardItem(QString::number(rec.class_id)) // 类别ID << new QStandardItem(rec.type); // 类别名称 model->appendRow(items); } // 可选:自动调整列宽 ui->tableView->resizeColumnsToContents(); log(service::LogLevel::INFO) << "数据库整理完成"; } 为什么tableview
07-13
namespace view::equipment { equipment_home::equipment_home(QWidget *parent) : QWidget(parent), ui(new view::equipment::Ui::equipment_home) { ui->setupUi(this); data::Equipment::buildDB(); data::Equipment::EquipmentClass::createEquipmentClassTable(); data::Equipment::EquipmentInstnace::createEquipmentInstanceTable(); //初始化模型 dataModel::EquipmentDataModel *modelRent = new dataModel::EquipmentDataModel(this); fliterModel::FilterProxyMdel *rentFilterProxyMdel = new fliterModel::FilterProxyMdel(this); rentFilterProxyMdel->setSourceModel(modelRent); //给视图指定模型 ui->tableView->setModel(rentFilterProxyMdel); ui->tableView->hideColumn(dataModel::EquipmentDataModel::Col_ID); ui->tableView->hideColumn(dataModel::EquipmentDataModel::Col_Count); ui->tableView->hideColumn(dataModel::EquipmentDataModel::Col_RentId); ui->tableView->hideColumn(dataModel::EquipmentDataModel::Col_ClassId); // 调整列宽以显示数据 ui->tableView->resizeColumnsToContents(); ui->tableView->horizontalHeader()->setStretchLastSection(true); // 加载数据 modelRent->fetchData(); // 调试信息 qDebug() << "Model row count:" << modelRent->rowCount(); qDebug() << "Model column count:" << modelRent->columnCount(); } 根据它完善下列代码: void equipment_home::on_kadd_clicked() //添加器材 { // 创建对话框并设置父对象(自动内存管理) kaddmanage *dialog = new kaddmanage(this); // 连接对话框的dataAdded信号到主界面的刷新函数(on_kreall_clicked) connect(dialog, &kaddmanage::dataAdded, this, [this]() { on_kreall_clicked(); // 调用整理库数据功能,刷新tableView }); // 显示对话框(模态或非模态均可,此处用show()非模态) dialog->show(); } void equipment_home::on_kreall_clicked() //整理库数据 { // 1. 确保数据库及表结构存在(原有功能) // 2. 加载所有设备完整记录 QList<data::Equipment::fullEquipmentRecord> records = data::Equipment::loadFullEquipmentRecords(); // 3. 按 "item" 字段升序排序(假设 "item" 对应设备名称 "name" 字段) // 使用 Qt 的字符串比较(支持本地化,类似Excel排序) std::sort(records.begin(), records.end(), [](const data::Equipment::fullEquipmentRecord& a, const data::Equipment::fullEquipmentRecord& b) { return QString::localeAwareCompare(a.name, b.name) < 0; // 升序排列 }); // 4. 将排序后的数据展示到 tableView(假设 UI 中构件名为 tableView) // 清空原有数据 QStandardItemModel* model = qobject_cast<QStandardItemModel*>(ui->tableView->model()); if (!model) { model = new QStandardItemModel(this); // 设置表头(仅首次初始化时设置) model->setHorizontalHeaderLabels({ "ID", "设备名称", "状态","类别名称", "创建时间" }); ui->tableView->setModel(model); } model->removeRows(0, model->rowCount()); // 清空旧数据 // 填充排序后的数据 for (const auto& rec : records) { QList<QStandardItem*> items; items << new QStandardItem(QString::number(rec.id)) // ID << new QStandardItem(rec.name) // 设备名称(排序字段) << new QStandardItem(rec.status) // 状态 << new QStandardItem(rec.inDate.toString("yyyy-MM-dd hh:mm:ss")) // 创建时间 << new QStandardItem(QString::number(rec.class_id)) // 类别ID << new QStandardItem(rec.type); // 类别名称 model->appendRow(items); } // 可选:自动调整列宽 ui->tableView->resizeColumnsToContents(); log(service::LogLevel::INFO) << "数据库整理完成"; }
07-13
// // Created by gouzuang on 25-7-6. // #include "equipment_home.h" #include "ui_equipment_home.h" #include "kaddmanage.h" #include "kchangemanage.h" #include "kdeletemanage.h" #include "applysee.h" #include "exam.h" #include <QStandardItemModel> // 补充Qt模型头文件 #include <QTableView> // 补充表格视图头文件 #include <QSortFilterProxyModel> // 新增:用于排序过滤 #include <QMessageBox> // 新增:用于错误提示 #include "module/data/data_Booking.h" #include "module/data/data_EquipmentManage.h" #include "service/logger/logger.h" // 补充日志头文件 namespace view::equipment { equipment_home::equipment_home(QWidget *parent) : QWidget(parent), ui(new Ui::equipment_home) { ui->setupUi(this); // 初始化表格视图(可选:设置排序功能) ui->tableView->setSortingEnabled(true); // 允许点击表头排序 on_kreall_clicked(); // 初始化时加载数据 } equipment_home::~equipment_home() { delete ui; } void equipment_home::on_zclose_clicked() { // 关闭应用 this->close(); } void equipment_home::on_kadd_clicked() { // 添加器材 kaddmanage *dialog = new kaddmanage(this); // 连接对话框的dataAdded信号(假设kaddmanage声明了该信号) connect(dialog, &kaddmanage::dataAdded, this, [this]() { on_kreall_clicked(); // 刷新数据 }); dialog->exec(); // 使用exec()模态对话框,确保数据添加后立即刷新 } void equipment_home::on_kreall_clicked() { // 整理库数据 // 1. 确保数据库及表结构存在 data::Equipment::buildDB(); // 2. 加载所有设备完整记录(添加错误处理) QList<data::Equipment::fullEquipmentRecord> records; try { records = data::Equipment::loadFullEquipmentRecords(); } catch (const std::exception &e) { QMessageBox::critical(this, "数据加载失败", QString("错误:%1").arg(e.what())); return; } // 3. 按设备名称升序排序(使用Qt内置排序,替代std::sort) QSortFilterProxyModel proxy; proxy.setSourceModel(new QStandardItemModel()); proxy.setFilterCaseSensitivity(Qt::CaseInsensitive); proxy.sort(1, Qt::AscendingOrder); // 第2列(设备名称)升序 // 4. 填充表格视图 QStandardItemModel *model = new QStandardItemModel(this); model->setHorizontalHeaderLabels({ "ID", "设备名称", "状态", "创建时间", "类别ID", "类别名称" }); for (const auto &rec : records) { QList<QStandardItem*> items; items << new QStandardItem(QString::number(rec.id)) << new QStandardItem(rec.name) << new QStandardItem(rec.status) << new QStandardItem(rec.inDate.toString("yyyy-MM-dd hh:mm:ss")) << new QStandardItem(QString::number(rec.class_id)) << new QStandardItem(rec.type); model->appendRow(items); } // 设置模型到表格视图(支持排序) ui->tableView->setModel(model); ui->tableView->resizeColumnsToContents(); log(service::LogLevel::INFO) << "数据库整理完成,共加载" << records.size() << "条记录"; } void equipment_home::on_kchange_clicked() { // 修改库数据 kchangemanage *dialog = new kchangemanage(this); // 可选:传递当前选中的设备ID到对话框 QModelIndexList selected = ui->tableView->selectionModel()->selectedRows(); if (!selected.isEmpty()) { int selectedId = selected.first().data().toInt(); dialog->setTargetEquipmentId(selectedId); // 假设对话框有此接口 } dialog->exec(); on_kreall_clicked(); // 修改后刷新数据 } void equipment_home::on_kdel_clicked() { // 删除库数据 QModelIndexList selected = ui->tableView->selectionModel()->selectedRows(); if (selected.isEmpty()) { QMessageBox::information(this, "提示", "请选择要删除的设备"); return; } int selectedId = selected.first().data().toInt(); if (QMessageBox::question(this, "确认删除", "是否删除选中的设备?") == QMessageBox::Yes) { // 调用数据层删除逻辑(假设data::Equipment有删除接口) // bool success = data::Equipment::deleteEquipment(selectedId); // if (success) { // on_kreall_clicked(); // } on_kreall_clicked(); // 示例刷新 } } void equipment_home::on_kexam_clicked() { // 检查和审批审查 exam *dialog = new exam(this); dialog->exec(); } void equipment_home::on_kseeborrow_clicked() { // 查看借用日志 QDialog dialog(this); dialog.setWindowTitle("借用日志"); QTableView tableView(&dialog); QStandardItemModel model(0, 3); model.setHorizontalHeaderLabels({"ID", "设备名称", "借用日期"}); // 示例数据(实际应从预订数据库查询) // auto borrowRecords = data::Booking::loadBookingRecordsByEquipmentId(equipmentId); for (int i = 0; i < 5; ++i) { model.appendRow({ new QStandardItem(QString::number(i+1)), new QStandardItem("设备 " + QString::number(i+1)), new QStandardItem("2024-11-01") }); } tableView.setModel(&model); QVBoxLayout layout(&dialog); layout.addWidget(&tableView); dialog.resize(600, 400); // 设置对话框大小 dialog.exec(); } void equipment_home::on_seefix_clicked() { // 查看维修日志(类似借用日志) QDialog dialog(this); dialog.setWindowTitle("维修日志"); QTableView tableView(&dialog); QStandardItemModel model(0, 3); model.setHorizontalHeaderLabels({"ID", "设备名称", "维修日期"}); for (int i = 0; i < 3; ++i) { model.appendRow({ new QStandardItem(QString::number(i+1)), new QStandardItem("设备 " + QString::number(i+1)), new QStandardItem("2024-10-15") }); } tableView.setModel(&model); QVBoxLayout layout(&dialog); layout.addWidget(&tableView); dialog.resize(600, 400); dialog.exec(); } void equipment_home::on_outdata_clicked() { // 超期预警 QDialog dialog(this); dialog.setWindowTitle("超期预警"); QTableView tableView(&dialog); QStandardItemModel model(0, 3); model.setHorizontalHeaderLabels({"ID", "设备名称", "超期天数"}); for (int i = 0; i < 2; ++i) { model.appendRow({ new QStandardItem(QString::number(i+1)), new QStandardItem("设备 " + QString::number(i+1)), new QStandardItem(QString::number(i+5)) }); } tableView.setModel(&model); QVBoxLayout layout(&dialog); layout.addWidget(&tableView); dialog.resize(600, 400); dialog.exec(); } void equipment_home::on_blacklist_clicked() { // 查看黑名单 QDialog dialog(this); dialog.setWindowTitle("黑名单"); QTableView tableView(&dialog); QStandardItemModel model(0, 2); model.setHorizontalHeaderLabels({"用户ID", "用户名"}); for (int i = 0; i < 4; ++i) { model.appendRow({ new QStandardItem(QString::number(i+1001)), new QStandardItem("用户 " + QString::number(i+1)) }); } tableView.setModel(&model); QVBoxLayout layout(&dialog); layout.addWidget(&tableView); dialog.resize(600, 400); dialog.exec(); } void equipment_home::on_searchbtn_clicked() { // 搜索功能(示例:按设备名称过滤) QString keyword = ui->searchEdit->text().trimmed(); // 假设UI有searchEdit输入框 if (keyword.isEmpty()) { on_kreall_clicked(); // 清空搜索时显示所有数据 return; } QStandardItemModel *model = qobject_cast<QStandardItemModel*>(ui->tableView->model()); if (!model) return; // 过滤设备名称列(第2列,索引1) for (int row = 0; row < model->rowCount(); ++row) { bool visible = model->item(row, 1)->text().contains(keyword, Qt::CaseInsensitive); ui->tableView->setRowHidden(row, !visible); } } } // view::equipment 三个假设部分请通过代码补充建立在函数体中,并调整其在ui合适位置
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值