修复开机没有墨水也进自检的问题;为状态label添加长文本滚动逻辑
This commit is contained in:
+93
-47
@@ -271,6 +271,8 @@ void InkJetPrinter::init()
|
|||||||
sysPara->status.machineMac = m_MainInstruction->dlgInputAddr->jd.addr;
|
sysPara->status.machineMac = m_MainInstruction->dlgInputAddr->jd.addr;
|
||||||
sysPara->para.rfidCountDown = 5;
|
sysPara->para.rfidCountDown = 5;
|
||||||
|
|
||||||
|
connect(this, &InkJetPrinter::pipingStatusChanged, this, &InkJetPrinter::checkStatusAndStartGearPump, Qt::QueuedConnection);
|
||||||
|
|
||||||
timer = new QTimer();
|
timer = new QTimer();
|
||||||
connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler()));
|
connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler()));
|
||||||
timer->start(10);
|
timer->start(10);
|
||||||
@@ -634,9 +636,7 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
|
|
||||||
static int tempFlag=0;
|
static int tempFlag=0;
|
||||||
static int save_weeknum = 0;
|
static int save_weeknum = 0;
|
||||||
static bool gearPumpRunFlag = false;
|
|
||||||
static bool ControledSwitchFlag = false;
|
static bool ControledSwitchFlag = false;
|
||||||
static bool gearPumpStartFlag = false;
|
|
||||||
static bool delay3s;
|
static bool delay3s;
|
||||||
bool InkSwintFlag = false,lastInkSwintFlag = false;
|
bool InkSwintFlag = false,lastInkSwintFlag = false;
|
||||||
static float gearPumpRunNormalValue = 0.0;
|
static float gearPumpRunNormalValue = 0.0;
|
||||||
@@ -689,22 +689,30 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
pulse_300ms = (sysPara->status.delay100ms%3) == 0; //1秒3次,并非精确的300ms
|
pulse_300ms = (sysPara->status.delay100ms%3) == 0; //1秒3次,并非精确的300ms
|
||||||
pulse_200ms = (sysPara->status.delay100ms%2) == 0;
|
pulse_200ms = (sysPara->status.delay100ms%2) == 0;
|
||||||
}
|
}
|
||||||
if(pulse_300ms) tempFlag=1;
|
|
||||||
if((sysPara->status.delay10ms%3) == 0) //读取状态后再检測
|
// static QElapsedTimer *timer_3s_elapsed = nullptr;
|
||||||
{
|
// if(timer_3s_elapsed == nullptr) {
|
||||||
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN) && !gearPumpRunFlag && !sysPara->status.isPumpValveControledByHand)//刚启动前3秒
|
// timer_3s_elapsed = new QElapsedTimer();
|
||||||
{
|
// timer_3s_elapsed->start();
|
||||||
if(sysPara->para.gearPumpEnable) {
|
// }
|
||||||
// 确保开机时控制字从 0 开始,让 pressureAdj 软启动从 0 爬坡,避免突变到高转速
|
|
||||||
if(sysPara->para.gearPumpValue != 0) {
|
// if(timer_3s_elapsed->elapsed() >= 3000) //读取状态后再检測
|
||||||
sysPara->para.gearPumpValue = 0;
|
// {
|
||||||
u = 0.0f;
|
// if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN) && !gearPumpRunFlag && !sysPara->status.isPumpValveControledByHand)//刚启动前3秒
|
||||||
sysPara->devOp->WriteMoterPump();
|
// {
|
||||||
}
|
// if(sysPara->para.gearPumpEnable) {
|
||||||
gearPumpStartFlag = true;
|
// // 确保开机时控制字从 0 开始,让 pressureAdj 软启动从 0 爬坡,避免突变到高转速
|
||||||
}
|
// if(sysPara->para.gearPumpValue != 0) {
|
||||||
}
|
// sysPara->para.gearPumpValue = 0;
|
||||||
}
|
// u = 0.0f;
|
||||||
|
// sysPara->devOp->WriteMoterPump();
|
||||||
|
// }
|
||||||
|
// gearPumpStartFlag = true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// timer_3s_elapsed->restart();
|
||||||
|
// }
|
||||||
|
|
||||||
if(pushButtonStartFlag && sysPara->status.selfCheckDone)
|
if(pushButtonStartFlag && sysPara->status.selfCheckDone)
|
||||||
{
|
{
|
||||||
@@ -765,10 +773,10 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
if(count_3s == 3)
|
if(count_3s == 3)
|
||||||
{
|
{
|
||||||
count_3s = 0;
|
count_3s = 0;
|
||||||
// ui->tabMainWindow->setRunStatus(tr("压力泄漏或压力传感器故障!"));
|
m_MainWidget->setRunStatus(tr("压力泄漏或压力传感器故障!"));
|
||||||
sysPara->status.gearPumpRunStopFlag = true;
|
sysPara->status.gearPumpRunStopFlag = true;
|
||||||
gearPumpRunNormalFlag = false;
|
gearPumpRunNormalFlag = false;
|
||||||
// LogInfo::setRunStatusText(tr("运行中压力泄漏,停齿轮泵!"));
|
LogInfo::setRunStatusText(tr("运行中压力泄漏,停齿轮泵!"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -779,23 +787,10 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
}
|
}
|
||||||
if(sysPara->para.gearPumpEnable && (sysPara->status.gearPumpRunSpeed < 100) && test_flag){
|
if(sysPara->para.gearPumpEnable && (sysPara->status.gearPumpRunSpeed < 100) && test_flag){
|
||||||
if(test_flag % 2)
|
if(test_flag % 2)
|
||||||
// ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed();
|
m_MainWidget->on_m_LeftBtn_clicked();
|
||||||
test_flag = 0;
|
test_flag = 0;
|
||||||
}
|
}
|
||||||
if(pulse_1s) {
|
if(pulse_1s) {
|
||||||
// 回收泵模式切换时重置软启动和泄漏保护学习状态
|
|
||||||
if(m_lastReclaimMode != sysPara->para.flagOfReclaimPumEnable)
|
|
||||||
{
|
|
||||||
m_lastReclaimMode = sysPara->para.flagOfReclaimPumEnable;
|
|
||||||
gearPumpRunNormalFlag = false;
|
|
||||||
gearPumpRunNormalValue = 0.0f;
|
|
||||||
m_rampDone = false;
|
|
||||||
m_adjSkip = 0;
|
|
||||||
m_lastPressure = 0;
|
|
||||||
m_stableCount = 0;
|
|
||||||
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
|
|
||||||
m_bufIdx = 0;
|
|
||||||
}
|
|
||||||
if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable)
|
if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable)
|
||||||
checkPressureControl();
|
checkPressureControl();
|
||||||
if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){
|
if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){
|
||||||
@@ -842,7 +837,7 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
if(gearPumpStartFlag)
|
if(gearPumpStartFlag)
|
||||||
{
|
{
|
||||||
pulse_3s ++;
|
pulse_3s ++;
|
||||||
if(pulse_3s == 3)
|
if(pulse_3s == 6)
|
||||||
{
|
{
|
||||||
pulse_3s = 0;
|
pulse_3s = 0;
|
||||||
gearPumpRunFlag = true;
|
gearPumpRunFlag = true;
|
||||||
@@ -1087,16 +1082,21 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
if (!sysPara->status.airPushing || m_MainWidget->m_2sFlag) {
|
if (!sysPara->status.airPushing || m_MainWidget->m_2sFlag) {
|
||||||
autoControlValvePump();
|
autoControlValvePump();
|
||||||
}
|
}
|
||||||
static qint32 adjDbgCnt = 0;
|
|
||||||
if(pulse_100ms && ++adjDbgCnt % 50 == 0){
|
|
||||||
|
|
||||||
// 调整压力算法时用这个追踪
|
// 检测回收泵模式切换,切换时重置泄漏保护学习状态和软启动状态
|
||||||
// qDebug()<<"[adjCond] gearPumpEnable="<<sysPara->para.gearPumpEnable
|
if(m_lastReclaimMode != sysPara->para.flagOfReclaimPumEnable)
|
||||||
// <<" isPumpValveControledByHand="<<sysPara->status.isPumpValveControledByHand
|
{
|
||||||
// <<" ControledSwitchFlag="<<ControledSwitchFlag
|
m_lastReclaimMode = sysPara->para.flagOfReclaimPumEnable;
|
||||||
// <<" gearPumpRunFlag="<<gearPumpRunFlag
|
gearPumpRunNormalFlag = false; // 泄漏保护重新学习
|
||||||
// <<" gearPumpStartFlag="<<gearPumpStartFlag;
|
gearPumpRunNormalValue = 0.0f;
|
||||||
|
m_rampDone = false; // 软启动重新爬坡适应新上限
|
||||||
|
m_adjSkip = 0;
|
||||||
|
m_lastPressure = 0;
|
||||||
|
m_stableCount = 0;
|
||||||
|
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
|
||||||
|
m_bufIdx = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pulse_100ms && sysPara->para.gearPumpEnable && !sysPara->status.isPumpValveControledByHand && ControledSwitchFlag ) {
|
if(pulse_100ms && sysPara->para.gearPumpEnable && !sysPara->status.isPumpValveControledByHand && ControledSwitchFlag ) {
|
||||||
pressureAdj();
|
pressureAdj();
|
||||||
}
|
}
|
||||||
@@ -1105,10 +1105,11 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
else{
|
else{
|
||||||
static bool flag = 1;
|
static bool flag = 1;
|
||||||
if(delay3s){
|
if(delay3s){
|
||||||
if(flag){
|
if(flag && gearPumpStartFlag){
|
||||||
flag = 0;
|
flag = 0;
|
||||||
// LogInfo::setRunStatusText(tr("缺少墨水,喷码机不能正常工作!"));
|
LogInfo::setRunStatusText(tr("缺少墨水,喷码机不能正常工作!"));
|
||||||
qDebug()<<"缺少墨水,喷码机不能正常工作!";
|
qDebug()<<"缺少墨水,喷码机不能正常工作!";
|
||||||
|
m_MainWidget->setRunStatus(tr("缺少墨水,喷码机不能正常工作!"));
|
||||||
}
|
}
|
||||||
// ui->tabMainWindow->setRunStatus(tr("缺少墨水,喷码机不能正常工作!"));
|
// ui->tabMainWindow->setRunStatus(tr("缺少墨水,喷码机不能正常工作!"));
|
||||||
}
|
}
|
||||||
@@ -1437,6 +1438,46 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InkJetPrinter::checkStatusAndStartGearPump()
|
||||||
|
{
|
||||||
|
// 使用 QElapsedTimer 去抖:要求条件连续保持 >= 2000ms
|
||||||
|
if(!sysPara)
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool cond = !(sysPara->status.statWarn & WARN_STATUS_INK_WARN)
|
||||||
|
&& !gearPumpRunFlag
|
||||||
|
&& !sysPara->status.isPumpValveControledByHand
|
||||||
|
&& sysPara->para.gearPumpEnable;
|
||||||
|
|
||||||
|
if (cond) {
|
||||||
|
// 若尚未开始计时,启动计时
|
||||||
|
if (!m_pipingClearSince.isValid()) {
|
||||||
|
m_pipingClearSince.start();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 若计时已到达阈值,再次确认条件并执行启动动作
|
||||||
|
if (m_pipingClearSince.elapsed() >= 2000) {
|
||||||
|
if (!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)
|
||||||
|
&& !gearPumpRunFlag
|
||||||
|
&& !sysPara->status.isPumpValveControledByHand) {
|
||||||
|
if (sysPara->para.gearPumpValue != 0) {
|
||||||
|
sysPara->para.gearPumpValue = 0;
|
||||||
|
u = 0.0f;
|
||||||
|
sysPara->devOp->WriteMoterPump();
|
||||||
|
}
|
||||||
|
gearPumpStartFlag = true; // 设置标记位,让 timerHandler 启动齿轮泵
|
||||||
|
}
|
||||||
|
m_pipingClearSince.invalidate();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 条件不满足,取消计时
|
||||||
|
if (m_pipingClearSince.isValid())
|
||||||
|
m_pipingClearSince.invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 以下槽函数逻辑完全不变
|
// 以下槽函数逻辑完全不变
|
||||||
void InkJetPrinter::getTestPrintWidgetButtonClickedSlot(int index)
|
void InkJetPrinter::getTestPrintWidgetButtonClickedSlot(int index)
|
||||||
{
|
{
|
||||||
@@ -1905,6 +1946,9 @@ void InkJetPrinter::saveSTM32Status(unsigned char *data){
|
|||||||
else target[i]=data[4+i];
|
else target[i]=data[4+i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Always emit pipingStatusChanged so checkStatusAndStartGearPump can perform debounce
|
||||||
|
emit pipingStatusChanged();
|
||||||
|
|
||||||
// emit showReclaimTankstatus(sysPara->status.reclaimTankstatus);
|
// emit showReclaimTankstatus(sysPara->status.reclaimTankstatus);
|
||||||
// emit showMotorIsen(sysPara->status.MOTOR_ISEN,sysPara->status.AD_FIXED);
|
// emit showMotorIsen(sysPara->status.MOTOR_ISEN,sysPara->status.AD_FIXED);
|
||||||
}
|
}
|
||||||
@@ -2825,8 +2869,7 @@ void InkJetPrinter::warningHandler(int type){
|
|||||||
if (dateTimeDiff > 60*60*24*2) {
|
if (dateTimeDiff > 60*60*24*2) {
|
||||||
sysPara->RFIDPara.inkCardTimeOut = true;
|
sysPara->RFIDPara.inkCardTimeOut = true;
|
||||||
}
|
}
|
||||||
if (!sysPara->RFIDPara.inkCardTimeOut)
|
inkTime = sysPara->RFIDPara.inkCardTimeOut ? 49 : (48 - dateTimeDiff/60/60);
|
||||||
inkTime = 48- dateTimeDiff/60/60;
|
|
||||||
}
|
}
|
||||||
if(sysPara->RFIDPara.inkCardTimeOut && flagOfWarning){
|
if(sysPara->RFIDPara.inkCardTimeOut && flagOfWarning){
|
||||||
if(++sysPara->status.showInkWarningNumber >= INTERVAL_AFTER48H){
|
if(++sysPara->status.showInkWarningNumber >= INTERVAL_AFTER48H){
|
||||||
@@ -3082,6 +3125,9 @@ void InkJetPrinter::handleWarnInk()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(sysPara->status.inkWarningCnt >= DETECT_WARNING_TIME){
|
if(sysPara->status.inkWarningCnt >= DETECT_WARNING_TIME){
|
||||||
|
|
||||||
|
// TO RFIDManager
|
||||||
|
|
||||||
sysPara->para.flagOfInkWarning = true;
|
sysPara->para.flagOfInkWarning = true;
|
||||||
manager_rfid->setInkCardFirstPrompt(true);
|
manager_rfid->setInkCardFirstPrompt(true);
|
||||||
QString strCurDateTime = QDateTime::currentDateTime().toString("yyMMddhhmmss");
|
QString strCurDateTime = QDateTime::currentDateTime().toString("yyMMddhhmmss");
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
#include "DateVarSet.h"
|
#include "DateVarSet.h"
|
||||||
#include "CounterVarSet.h"
|
#include "CounterVarSet.h"
|
||||||
|
|
||||||
|
#include <QElapsedTimer>
|
||||||
|
|
||||||
#include "QBarCode.h"
|
#include "QBarCode.h"
|
||||||
#include "dlgQrCode.h"
|
#include "dlgQrCode.h"
|
||||||
|
|
||||||
@@ -220,11 +222,14 @@ private slots:
|
|||||||
|
|
||||||
// 保养警告
|
// 保养警告
|
||||||
void slt_warningMaintenance();
|
void slt_warningMaintenance();
|
||||||
|
|
||||||
|
void checkStatusAndStartGearPump();
|
||||||
signals:
|
signals:
|
||||||
void maintenanceShow();
|
void maintenanceShow();
|
||||||
|
|
||||||
void printStatusChanged(bool isPrinting);
|
void printStatusChanged(bool isPrinting);
|
||||||
|
|
||||||
|
void pipingStatusChanged();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void showEvent(QShowEvent* e) override;
|
void showEvent(QShowEvent* e) override;
|
||||||
@@ -255,4 +260,10 @@ private:
|
|||||||
int m_bufIdx = 0; // pressureAdj 滑动平均写入索引
|
int m_bufIdx = 0; // pressureAdj 滑动平均写入索引
|
||||||
bool m_lastByHand = false; // 上一帧手动控制标志(边沿检测用)
|
bool m_lastByHand = false; // 上一帧手动控制标志(边沿检测用)
|
||||||
bool m_lastReclaimMode = false; // 上一帧回收泵模式(边沿检测用)
|
bool m_lastReclaimMode = false; // 上一帧回收泵模式(边沿检测用)
|
||||||
|
|
||||||
|
// 去抖(管路/墨水警告清除)——使用 QElapsedTimer 实现连续 2s 无警告判断
|
||||||
|
QElapsedTimer m_pipingClearSince;
|
||||||
|
|
||||||
|
bool gearPumpRunFlag = false;
|
||||||
|
bool gearPumpStartFlag = false;
|
||||||
};
|
};
|
||||||
|
|||||||
+2
-2
@@ -203,9 +203,9 @@ void Logger::log(const QtMsgType type, const QString& message, const QString &fi
|
|||||||
|
|
||||||
LogMessage* logMessage=new LogMessage(type,message,logVars.localData(),file,function,line);
|
LogMessage* logMessage=new LogMessage(type,message,logVars.localData(),file,function,line);
|
||||||
|
|
||||||
#ifndef BNS_DEBUG
|
// #ifndef BNS_DEBUG
|
||||||
std::cout << qPrintable(logMessage->toString(msgFormat,"hh:mm:ss.zzz")) << std::flush;
|
std::cout << qPrintable(logMessage->toString(msgFormat,"hh:mm:ss.zzz")) << std::flush;
|
||||||
#endif
|
// #endif
|
||||||
|
|
||||||
if (bufferSize>0)
|
if (bufferSize>0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -153,6 +153,8 @@ void MainInstruction::ondialogAuthorizationAccepted(){
|
|||||||
sysPara->RFIDPara.inkCardTimeOut = false;
|
sysPara->RFIDPara.inkCardTimeOut = false;
|
||||||
sysPara->RFIDPara.solventCardTimeOut = false;
|
sysPara->RFIDPara.solventCardTimeOut = false;
|
||||||
sysPara->RFIDPara.needMaintenance = false;
|
sysPara->RFIDPara.needMaintenance = false;
|
||||||
|
sysPara->RFIDPara.needInkCard = false;
|
||||||
|
sysPara->RFIDPara.needSolventCard = false;
|
||||||
QDate curDate = QDate::currentDate();
|
QDate curDate = QDate::currentDate();
|
||||||
int curdate = curDate.toString("yyMMdd").toInt();
|
int curdate = curDate.toString("yyMMdd").toInt();
|
||||||
sysPara->RFIDPara.maintenanceDate = curdate; // 维护日期
|
sysPara->RFIDPara.maintenanceDate = curdate; // 维护日期
|
||||||
@@ -163,6 +165,7 @@ void MainInstruction::ondialogAuthorizationAccepted(){
|
|||||||
sysPara->para.solventWarnDate = 0;
|
sysPara->para.solventWarnDate = 0;
|
||||||
sysPara->para.solventWarnTime = 0;
|
sysPara->para.solventWarnTime = 0;
|
||||||
sysPara->saveParaToFile();
|
sysPara->saveParaToFile();
|
||||||
|
sysPara->saveRFIDPara();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if( dlgInputAddr->checkSupperJm(authString))
|
else if( dlgInputAddr->checkSupperJm(authString))
|
||||||
|
|||||||
+109
-1
@@ -34,6 +34,8 @@
|
|||||||
#include "scene/PicCounterItem.h"
|
#include "scene/PicCounterItem.h"
|
||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
#include <QScroller>
|
#include <QScroller>
|
||||||
|
#include <QFontMetrics>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
extern MyInputMethod *myInputMethod;
|
extern MyInputMethod *myInputMethod;
|
||||||
unsigned char test_flag,open_close;
|
unsigned char test_flag,open_close;
|
||||||
@@ -102,6 +104,15 @@ MainWidget::MainWidget(QWidget* parent)
|
|||||||
m_reclaimOpenBtnFlashTimer = new QTimer(this);
|
m_reclaimOpenBtnFlashTimer = new QTimer(this);
|
||||||
connect(m_reclaimOpenBtnFlashTimer, &QTimer::timeout, this, &MainWidget::onReclaimOpenBtnFlashTimerTimeout);
|
connect(m_reclaimOpenBtnFlashTimer, &QTimer::timeout, this, &MainWidget::onReclaimOpenBtnFlashTimerTimeout);
|
||||||
m_reclaimOpenBtnFlashTimer->setInterval(500);
|
m_reclaimOpenBtnFlashTimer->setInterval(500);
|
||||||
|
|
||||||
|
m_nozzleStateMarqueeTimer = new QTimer(this);
|
||||||
|
m_nozzleStateMarqueeTimer->setInterval(30);
|
||||||
|
connect(m_nozzleStateMarqueeTimer, &QTimer::timeout, this, &MainWidget::onNozzleStateMarqueeTimeout);
|
||||||
|
|
||||||
|
if (ui.lb_nozzleState) {
|
||||||
|
ui.lb_nozzleState->installEventFilter(this);
|
||||||
|
ui.lb_nozzleState->setText(" ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWidget::~MainWidget()
|
MainWidget::~MainWidget()
|
||||||
@@ -391,7 +402,104 @@ void MainWidget::setRunStatus(QString str)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.lb_nozzleState->setText(str);
|
updateNozzleStateMarquee(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWidget::stopNozzleStateMarquee()
|
||||||
|
{
|
||||||
|
if (m_nozzleStateMarqueeTimer && m_nozzleStateMarqueeTimer->isActive()) {
|
||||||
|
m_nozzleStateMarqueeTimer->stop();
|
||||||
|
}
|
||||||
|
m_nozzleStateFullText.clear();
|
||||||
|
m_nozzleStateMarqueeOffsetPx = 0;
|
||||||
|
m_nozzleStateMarqueeTextWidth = 0;
|
||||||
|
m_nozzleStateMarqueeGapPx = 0;
|
||||||
|
m_nozzleStateMarqueeEnabled = false;
|
||||||
|
if (ui.lb_nozzleState) {
|
||||||
|
ui.lb_nozzleState->setText(QString());
|
||||||
|
ui.lb_nozzleState->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWidget::updateNozzleStateMarquee(const QString& str)
|
||||||
|
{
|
||||||
|
if (!ui.lb_nozzleState)
|
||||||
|
return;
|
||||||
|
|
||||||
|
QString text = str;
|
||||||
|
if (text.isEmpty()) {
|
||||||
|
stopNozzleStateMarquee();
|
||||||
|
ui.lb_nozzleState->setText(text);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QFontMetrics fm(ui.lb_nozzleState->font());
|
||||||
|
const int labelWidth = ui.lb_nozzleState->contentsRect().width();
|
||||||
|
if (labelWidth <= 0 || fm.horizontalAdvance(text) <= labelWidth) {
|
||||||
|
stopNozzleStateMarquee();
|
||||||
|
ui.lb_nozzleState->setText(text);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 长文本循环滚动,按像素偏移绘制
|
||||||
|
m_nozzleStateFullText = text;
|
||||||
|
m_nozzleStateMarqueeTextWidth = fm.horizontalAdvance(text);
|
||||||
|
m_nozzleStateMarqueeGapPx = qMax(20, labelWidth / 2);
|
||||||
|
m_nozzleStateMarqueeOffsetPx = 0;
|
||||||
|
m_nozzleStateMarqueeEnabled = true;
|
||||||
|
ui.lb_nozzleState->setText(QString());
|
||||||
|
ui.lb_nozzleState->update();
|
||||||
|
|
||||||
|
if (!m_nozzleStateMarqueeTimer->isActive()) {
|
||||||
|
m_nozzleStateMarqueeTimer->start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWidget::onNozzleStateMarqueeTimeout()
|
||||||
|
{
|
||||||
|
if (!m_nozzleStateMarqueeEnabled || !ui.lb_nozzleState) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int labelWidth = ui.lb_nozzleState->contentsRect().width();
|
||||||
|
if (labelWidth <= 0 || m_nozzleStateMarqueeTextWidth <= 0) {
|
||||||
|
stopNozzleStateMarquee();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int totalWidth = m_nozzleStateMarqueeTextWidth + m_nozzleStateMarqueeGapPx;
|
||||||
|
m_nozzleStateMarqueeOffsetPx += 1;
|
||||||
|
if (m_nozzleStateMarqueeOffsetPx >= totalWidth) {
|
||||||
|
m_nozzleStateMarqueeOffsetPx = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.lb_nozzleState->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MainWidget::eventFilter(QObject *watched, QEvent *event)
|
||||||
|
{
|
||||||
|
if (watched == ui.lb_nozzleState && m_nozzleStateMarqueeEnabled) {
|
||||||
|
if (event->type() == QEvent::Paint) {
|
||||||
|
QPainter painter(ui.lb_nozzleState);
|
||||||
|
painter.setRenderHint(QPainter::TextAntialiasing, true);
|
||||||
|
|
||||||
|
const QRect rect = ui.lb_nozzleState->contentsRect();
|
||||||
|
painter.fillRect(rect, ui.lb_nozzleState->palette().window());
|
||||||
|
painter.setPen(ui.lb_nozzleState->palette().color(QPalette::WindowText));
|
||||||
|
painter.setFont(ui.lb_nozzleState->font());
|
||||||
|
|
||||||
|
const QFontMetrics fm(ui.lb_nozzleState->font());
|
||||||
|
const int baseline = (rect.height() + fm.ascent() - fm.descent()) / 2;
|
||||||
|
const int startX = rect.left() - m_nozzleStateMarqueeOffsetPx;
|
||||||
|
const int textY = rect.top() + baseline;
|
||||||
|
|
||||||
|
painter.drawText(startX, textY, m_nozzleStateFullText);
|
||||||
|
painter.drawText(startX + m_nozzleStateMarqueeTextWidth + m_nozzleStateMarqueeGapPx, textY, m_nozzleStateFullText);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return QWidget::eventFilter(watched, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 生成字模数据 */
|
/* 生成字模数据 */
|
||||||
|
|||||||
+18
-4
@@ -187,6 +187,11 @@ public slots:
|
|||||||
void onLabelFaultRusumePressed();
|
void onLabelFaultRusumePressed();
|
||||||
|
|
||||||
void UpdateUIVersion();
|
void UpdateUIVersion();
|
||||||
|
|
||||||
|
void on_m_RightBtn_clicked();
|
||||||
|
|
||||||
|
void on_m_LeftBtn_clicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void init();
|
void init();
|
||||||
// void SendPrintDataToFpga(unsigned char);
|
// void SendPrintDataToFpga(unsigned char);
|
||||||
@@ -194,20 +199,27 @@ private:
|
|||||||
|
|
||||||
void initSheet();
|
void initSheet();
|
||||||
|
|
||||||
|
void updateNozzleStateMarquee(const QString& str);
|
||||||
|
void stopNozzleStateMarquee();
|
||||||
|
bool eventFilter(QObject *watched, QEvent *event) override;
|
||||||
|
|
||||||
bool m_reclaimFlashState = false;
|
bool m_reclaimFlashState = false;
|
||||||
|
|
||||||
QTimer* m_reclaimOpenBtnFlashTimer = nullptr;
|
QTimer* m_reclaimOpenBtnFlashTimer = nullptr;
|
||||||
|
|
||||||
|
QTimer* m_nozzleStateMarqueeTimer = nullptr;
|
||||||
|
QString m_nozzleStateFullText;
|
||||||
|
int m_nozzleStateMarqueeOffsetPx = 0;
|
||||||
|
int m_nozzleStateMarqueeTextWidth = 0;
|
||||||
|
int m_nozzleStateMarqueeGapPx = 0;
|
||||||
|
bool m_nozzleStateMarqueeEnabled = false;
|
||||||
|
|
||||||
// 高亮切换
|
// 高亮切换
|
||||||
void changeHighLight(bool isStart);
|
void changeHighLight(bool isStart);
|
||||||
private slots:
|
private slots:
|
||||||
void airPushingProcess();
|
void airPushingProcess();
|
||||||
void buttonClickedSlot();
|
void buttonClickedSlot();
|
||||||
|
|
||||||
void on_m_RightBtn_clicked();
|
|
||||||
|
|
||||||
void on_m_LeftBtn_clicked();
|
|
||||||
|
|
||||||
void on_m_ManageBtn_clicked();
|
void on_m_ManageBtn_clicked();
|
||||||
|
|
||||||
void slt_setNum();
|
void slt_setNum();
|
||||||
@@ -216,6 +228,8 @@ private slots:
|
|||||||
|
|
||||||
void onReclaimOpenBtnFlashTimerTimeout();
|
void onReclaimOpenBtnFlashTimerTimeout();
|
||||||
|
|
||||||
|
void onNozzleStateMarqueeTimeout();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void sendButtonClickedSignal(int index);
|
void sendButtonClickedSignal(int index);
|
||||||
void setDisableAll();
|
void setDisableAll();
|
||||||
|
|||||||
Reference in New Issue
Block a user