有了之前可视化大屏电子看板系统的经验,要做这个ERP库存库房发货电子看板,可以说是水到渠成轻车熟路,技术难度比之前做过的各种大屏系统的子模块都要简单。由于库存库房发货数据的特殊性,基本上都是要求表格形式展示,唯一稍微多一点的代码就是有部分表格数据要求不同警报需要不同颜色显示数据,还有部分字段需要展示成进度条,但是总归都还是在表格中,这几种特殊要求用自定义委托即可。之前就把委托搞得滚瓜烂熟,还搞了个自定义委托全家桶,要的各种委托效果,常用的都具备了,直接把他拿过来用在这里就行。
库存库房对应的表格有很多,于是需要做一个通用的窗体类,可以传入对应的表名,字段名,自动查询数据显示在表格中,还可以设置查询间隔,QSqlTableModel数据库模型对表格封装的特别友好,定时查询只需要调用select方法即可,就会把最新的数据显示到表格中。
公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。
公众号:Qt入门和进阶,专门介绍Qt/C++相关知识点学习,帮助Qt开发者更好的深入学习Qt。多位Qt元婴期大神,一步步带你从入门到进阶,走上财务自由之路。
#include "frmmoduletable.h"
#include "ui_frmmoduletable.h"
#include "quihelper.h"
#include "dbtablemodel.h"
#include "dbdelegate.h"
frmModuleTable::frmModuleTable(QWidget *parent) : QWidget(parent), ui(new Ui::frmModuleTable)
{
ui->setupUi(this);
this->initForm();
}
frmModuleTable::~frmModuleTable()
{
delete ui;
}
void frmModuleTable::initForm()
{
//实例化数据库表模型
model = new DbTableModel(this);
QUIHelper::initTableView(ui->tableView, AppData::RowHeight);
//隐藏滚动条
//ui->tableView->verticalScrollBar()->setVisible(false);
//ui->tableView->horizontalScrollBar()->setVisible(false);
//设置表格数据模型的一些参数
model->setAllCenter(true);
//model->setAlignCenterColumn(QList() << 1 << 2);
//model->setProperty("hideColumn", 2);
//设置悬停整行选中
model->setTableView(ui->tableView);
//定时器刷新数据
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), model, SLOT(select()));
//测试数据
QList columnNames;
QList columnWidths;
columnNames << "编号" << "名称" << "系列1" << "系列2";
columnWidths << 60 << 80 << 70 << 70;
//setTable("t_1_1_mold_prod_total", columnNames, columnWidths);
}
void frmModuleTable::setTable(const QString &tableName, const QList &columnNames, const QList &columnWidths)
{
//绑定数据库表到数据模型
DbHelper::bindTable(AppConfig::LocalDbType, model, tableName);
//设置列排序
model->setSort(0, Qt::AscendingOrder);
//立即查询一次
model->select();
//将数据库表模型设置到表格上
ui->tableView->setModel(model);
//挨个设置列名和列宽
int count = columnNames.count();
for (int i = 0; i < count; ++i) {
model->setHeaderData(i, Qt::Horizontal, columnNames.at(i));
ui->tableView->setColumnWidth(i, columnWidths.at(i));
}
//演示自定义委托
#if 1
//进度条
DbDelegate *d_progressbar = new DbDelegate(this);
d_progressbar->setDelegateMin(0);
d_progressbar->setDelegateMax(100);
d_progressbar->setDelegateType("QProgressBar");
d_progressbar->setDelegateColumn(9);
ui->tableView->setItemDelegateForColumn(9, d_progressbar);
//ui->tableView->setStyleSheet("QProgressBar{border:0px;}");
//关键字捕捉不同颜色
DbDelegate *d_check = new DbDelegate(this);
d_check->setCheckText(true);
d_check->setCheckType(">=");
d_check->setCheckValue("80");
d_check->setCheckTextColor(Qt::red);
d_check->setCheckBgColor(Qt::transparent);
d_check->setDelegateColumn(7);
ui->tableView->setItemDelegateForColumn(7, d_check);
#endif
}
void frmModuleTable::start(int interval)
{
if (!timer->isActive()) {
timer->start(interval);
}
}
void frmModuleTable::stop()
{
if (timer->isActive()) {
timer->stop();
}
}