问题修改

This commit is contained in:
lixiao 2025-04-24 11:38:37 +08:00
parent 7b5e773567
commit 9b92456f94
28 changed files with 363 additions and 238 deletions

View File

@ -27,7 +27,7 @@
#define JUDGE_VERSION_MAJOR 1
#define JUDGE_VERSION_MINOR 0
#define JUDGE_VERSION_PATCH 3
#define JUDGE_VERSION_STAMP "2504191100b"
#define JUDGE_VERSION_STAMP "2504241045b"
#if JUDGE_USE_OLD
# undef JUDGE_VERSION_STAMP
# define JUDGE_VERSION_STAMP "2411121010b.old"

View File

@ -261,6 +261,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_DECLARE(615); //侧方停车读卡前进时碰6线不合格 0
SYSSET_DECLARE(617, type_int); //参数617语音实时播报项目是否合格0-否 1-是语音码xmhgxmbhg
SYSSET_DECLARE(624); //考试评判车门模式
SYSSET_DECLARE(629); //默认的在车辆进入坡道区域才评判停车定点坡道中停立刻评判默认的在车辆进入定点10米区域才评判停车定点
SYSSET_DECLARE(641, type_int); //641=1 是车尾过5-6延长线结束
SYSSET_DECLARE(660); //侧方停车项目 停车距离判断阈值控制参数
SYSSET_DECLARE(668); //安全带评判模式
@ -407,6 +408,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_ASSIGN(615);
SYSSET_ASSIGN(617);
SYSSET_ASSIGN(624);
SYSSET_ASSIGN(629);
SYSSET_ASSIGN(641);
SYSSET_ASSIGN(660);
SYSSET_ASSIGN(668);

View File

@ -91,46 +91,40 @@ ErrorCode ExamCarSub2::examBeginExam()
}
}
return QE(codeSuccess);
}
//2、执行扣分
int grade = 0;
for(size_t i = 0; i < m_stuInfo.kfxm.size(); i++)
{
const TKfXm& markItem = m_stuInfo.kfxm[i];
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
if(nullptr == rule)
{
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
return QE(errorMarkNotFind);
}
grade += rule->markreal;
TMarkInfo mark(rule->itemno, rule->markserial, rule->markcatalog, 0, 0, 0);
m_marks.push_back(mark);
ErrorCode ExamCarSub2::examGoonExam()
{
IExamItem* item = findExamItem(markItem.xmdm);
TASSERT(item != nullptr, "");
if(item)
{
item->setMarkGrade(rule->markreal);
}
loginfo("ddxk-mark xmdm=%d,kfdm=%s", markItem.xmdm, markItem.kfdm.c_str());
}
m_grade -= grade;
if(m_grade < 0)
{
m_grade = 0;
}
//3、处理断点续考
if(m_stuInfo.ddxk)
{
m_disForward = m_stuInfo.yklc;
//1、处理已考项目
//2、执行扣分
int grade = 0;
for(size_t i = 0; i < m_stuInfo.kfxm.size(); i++)
{
const TKfXm& markItem = m_stuInfo.kfxm[i];
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
if(nullptr == rule)
{
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
return QE(errorMarkNotFind);
}
grade += rule->markreal;
TMarkInfo mark(rule->itemno, rule->markserial, rule->markcatalog, 0, 0, 0);
m_marks.push_back(mark);
IExamItem* item = findExamItem(markItem.xmdm);
TASSERT(item != nullptr, "");
if(item)
{
item->setMarkGrade(rule->markreal);
}
loginfo("ddxk-mark xmdm=%d,kfdm=%s", markItem.xmdm, markItem.kfdm.c_str());
}
m_grade -= grade;
if(m_grade < 0)
{
m_grade = 0;
}
//m_timeBegin = m_stuInfo.ddkssj;
}
@ -141,7 +135,6 @@ ErrorCode ExamCarSub2::examGoonExam()
//createEventExamFinish(ExamFinishAuto); //杨 20240724 都由苏那边控制
return QE(errorBeginNotQual); //已经不合格了
}
return QE(codeSuccess);
}

View File

@ -23,7 +23,6 @@ public:
public: //for IExamCar override
virtual ErrorCode examCarInitInfo(TInitInfo* info) override;
virtual ErrorCode examBeginExam() override;
virtual ErrorCode examGoonExam() override;
virtual ErrorCode examEndExam() override;
virtual ErrorCode examJudgeExam() override;
virtual ErrorCode examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type) override;

View File

@ -66,7 +66,7 @@ ErrorCode ExamCarSub3::examBeginExam()
TKM3Item* item = findExamItem(itemNo);
if(item != nullptr)
{
KM3EndItem(itemNo, false);
KM3EndItem(itemNo, false, false);
//item->Item_Color = itemStateHg;
//item->TestPro = ItemProFlagEnd;
//item->FinishFlag = true; //防止已考发项目结束事件
@ -83,54 +83,43 @@ ErrorCode ExamCarSub3::examBeginExam()
{
m_newSub3->examBegin();
}
return QE(codeSuccess);
}
ErrorCode ExamCarSub3::examGoonExam()
{
//4、执行扣分(如果StuInfo.CSH_Marks 不为空)
//这个时候Tds的Grade会被重新赋值
//2、执行扣分
int grade = 0;
for(size_t i = 0; i < m_stuInfo.kfxm.size(); i++)
{
const TKfXm& markItem = m_stuInfo.kfxm[i];
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
if(nullptr == rule)
{
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
return QE(errorMarkNotFind);
}
grade += rule->markreal;
TMarkInfo mark(rule->itemno, rule->markserial, rule->markcatalog, 0, 0, 0);
m_marks.push_back(mark);
//断点扣分不要生成任何事件通知,关心的就是本地扣出来即可 //???yhyflag
//Mark(markItem.xmdm, markItem.kfdm, false, true, 0, true); //Self.Mark(TempItemNo, Str3, False, True, 0, True);
//扣分只记录分数,不需要根据扣分记录项目状态 20240816 在洛阳确认的
//TKM3Item* item = findExamItem(markItem.xmdm);
//TASSERT(item != nullptr, "");
//if(item)
//{
// item->Item_Color = itemStateBhg;
//}
loginfo("ddxk-mark xmdm=%d,kfdm=%s", markItem.xmdm, markItem.kfdm.c_str());
}
m_grade -= grade;
if(m_grade < 0)
{
m_grade = 0;
}
//3、处理断点续考
if(m_stuInfo.ddxk)
{
m_disForward = m_stuInfo.yklc;
//1、处理已考项目
//2、执行扣分
int grade = 0;
for(size_t i = 0; i < m_stuInfo.kfxm.size(); i++)
{
const TKfXm& markItem = m_stuInfo.kfxm[i];
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
if(nullptr == rule)
{
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
return QE(errorMarkNotFind);
}
grade += rule->markreal;
TMarkInfo mark(rule->itemno, rule->markserial, rule->markcatalog, 0, 0, 0);
m_marks.push_back(mark);
//断点扣分不要生成任何事件通知,关心的就是本地扣出来即可 //???yhyflag
//Mark(markItem.xmdm, markItem.kfdm, false, true, 0, true); //Self.Mark(TempItemNo, Str3, False, True, 0, True);
//扣分只记录分数,不需要根据扣分记录项目状态 20240816 在洛阳确认的
//TKM3Item* item = findExamItem(markItem.xmdm);
//TASSERT(item != nullptr, "");
//if(item)
//{
// item->Item_Color = itemStateBhg;
//}
loginfo("ddxk-mark xmdm=%d,kfdm=%s", markItem.xmdm, markItem.kfdm.c_str());
}
m_grade -= grade;
if(m_grade < 0)
{
m_grade = 0;
}
//3、更新开始时间
//m_timeBegin = m_stuInfo.ddkssj != 0 ? m_stuInfo.ddkssj : Tools::nowTime();
//m_StartTime = GetCurrentTime2();
@ -667,7 +656,7 @@ bool ExamCarSub3::Init_KM3_Global()
//examItem->TestPro = ItemProFlagIdle;
//examItem->FinishFlag = true;
examItem->NoID = true;
KM3EndItem(itemNo,true,false);
KM3EndItem(itemNo,false,false);
}
}
}

View File

@ -24,7 +24,6 @@ public:
public: //for IExamCar override
virtual ErrorCode examCarInitInfo(TInitInfo* info) override;
virtual ErrorCode examBeginExam() override;
virtual ErrorCode examGoonExam() override;
virtual ErrorCode examEndExam() override;
virtual ErrorCode examJudgeExam() override;
virtual ErrorCode examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type) override;

View File

@ -107,12 +107,6 @@ int IExamCar::examJudgeBeginExam(const char* data, int len)
{
return QE((ErrorCode)errCode);
}
//处理断点续考
errCode = examGoonExam();
if(errCode != codeSuccess)
{
return QE((ErrorCode)errCode);
}
m_examState = examStateIng;
logtrace("begin-exam success %s", target().c_str());

View File

@ -122,7 +122,6 @@ public:
public:
virtual ErrorCode examCarInitInfo(TInitInfo* info) = 0;
virtual ErrorCode examBeginExam() = 0;
virtual ErrorCode examGoonExam() = 0;
virtual ErrorCode examEndExam() = 0;
virtual ErrorCode examJudgeExam() = 0;
virtual ErrorCode examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type) = 0;

View File

@ -325,7 +325,8 @@ void Sub2Judge00Dcrk::divorcedItemArea()
bool out = ((!in0 && in1) || !pureCarInItemArea()); //阶段10后轮先不在项目区域结束项目然后才会走道这里
#else
//bool out = (!pureCarInItemArea());
bool out = pureCarTouchSoloLine(m_model->L12_10(), II(13), 5);
bool out = pureCarTouchSoloLines({m_model->L12_10(), m_model->L78_11()}, II(13), 5) &&
!pureCarPointInPoly(II(1), m_model->poly1278());
#endif
if(out)
{

View File

@ -166,10 +166,19 @@ JUDGE_STAGE_IMPL(Sub2Judge02Pdqb, Sub2PdqbStage0)
TGPSPoint pt2 = GpsMath::calcCenterPoint(m_model->P4(), m_model->P7());
double gc = FactorySub2Survey->baseGc();
int distance = GpsMath::DianXianJL_GPS_CM(p1, pt1, pt2, gc);
if(distance < m_800CM)
const std::string& s629 = TableSysSet->get629();
if(s629 == "1")
{
m_stage = Sub2PdqbStage1;
}
else
{
if(distance < m_1000CM)
{
m_stage = Sub2PdqbStage1;
}
}
if(m_endLineFlag == true)
{

View File

@ -49,7 +49,7 @@ private:
const int m_15CM = 15; //15厘米
const int m_30CM = 30; //30厘米
const int m_50CM = 50; //50厘米
const int m_800CM = 800; //800厘米
const int m_1000CM = 1000; //1000厘米
};
#endif // SUB2JUDGE02PDQB_H

View File

@ -84,11 +84,12 @@ void Sub2Judge05Qxxs::judgeTouchLine()
const TGPSPoints& right = m_model->right();
if(IS_C1C2C5(m_carType))
{
//1、车轮压线存粹车轮 //只用车轮子计算
static constexpr int history = 2;
const PointSets& wheels = m_car->carModel()->wheelAll();
JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(left, wheels, history), MARK_SUB2_QXXS_61);
JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(right, wheels, history), MARK_SUB2_QXXS_62);
//1、车轮压线纯粹车轮只用车轮子计算
//注意:由于GPS可能漂移不能用这种方式计算用历史车轮点判断会误判无锡就出现这种情况 yhy 2025-04-23
//static constexpr int history = 2;
//const PointSets& wheels = m_car->carModel()->wheelAll();
//JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(left, wheels, history), MARK_SUB2_QXXS_61);
//JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(right, wheels, history), MARK_SUB2_QXXS_62);
//2、排线和边线相交也算压线
const PointPairs& wind = m_car->carModel()->wheelWindAll();

View File

@ -558,8 +558,8 @@ JUDGE_CXX_API const char* stage2Describe(Sub2CftcStage code);
#define MARK_SUB2_PDQB_203 "203"
#define MARK_SUB2_PDQB_41 "41"
#define EnumMakeSub2PdqbStage(declare) \
declare(Sub2PdqbStage0, "", JUDGE_UTF8S("距离停车标杆大于8")) \
declare(Sub2PdqbStage1, "", JUDGE_UTF8S("到达标杆8米处,未停车")) \
declare(Sub2PdqbStage0, "", JUDGE_UTF8S("距离停车标杆大于10")) \
declare(Sub2PdqbStage1, "", JUDGE_UTF8S("到达标杆10米处,未停车")) \
declare(Sub2PdqbStage2, "", JUDGE_UTF8S("停车未起步阶段")) \
declare(Sub2PdqbStage3, "", JUDGE_UTF8S("坡道起步阶段(后轮到达89位置结束"))
enum Sub2PdqbStage{ EnumMakeSub2PdqbStage(ENUM_SELECT_1_CMD_3) Sub2PdqbStageUnknown };

View File

@ -457,9 +457,9 @@ struct TStuInfo
int64 kskssj = 0; //考试开始时间 1970年到现在的毫秒数 "2023-03-21 10:05:23"
std::vector<TItemExam> ksxm = {}; //监管返回本次考试所需项目 2023-04-24 杨海洋修改
std::vector<int32> ykxm = {}; //已考项目 "1,3" 对应枚举 ExamItemCode DuanDian_FinishItems
std::vector<TKfXm> kfxm = {}; //扣分项目 "20,01;" 对应枚举 ExamItemCode DuanDian_Marks
int8 ddxk = 0; //是否断点续考0-否 1-是)
int64 ddkssj = 0; //考试中断那次考试开始考试时间 1970年到现在的毫秒数
std::vector<TKfXm> kfxm = {}; //扣分项目 "20,01;" 对应枚举 ExamItemCode DuanDian_Marks
int32 yklc = 0; //已考里程,单位厘米
int8 sczb = 0; //CS_Finish_SCZB_Flag:Boolan; //考前绕车一周(初始完成上车准备标志)外壳传递的Boolan

View File

@ -0,0 +1,13 @@
@echo off
REM 设置控制台代码页为UTF-8
chcp 65001
@REM 先svn拉取
@echo 正在拉取svn代码...
svn update
@REM git提交
@echo 正在提交git代码...
git add .
git commit -m "脚本提交的代码"
git push
@echo 操作完成
pause

View File

@ -19,7 +19,7 @@
#define KIT_VERSION_MAJOR 1
#define KIT_VERSION_MINOR 0
#define KIT_VERSION_PATCH 2
#define KIT_VERSION_STAMP "2504191102b"
#define KIT_VERSION_STAMP "2504241048b"
#define KIT_VERSION_STR JUDGE_STR(KIT_VERSION_MAJOR.KIT_VERSION_MINOR.KIT_VERSION_PATCH)

View File

@ -115,7 +115,17 @@ QString addContent(QString& out, const QString& name, const QString& info)
void setStyleComboBox(QComboBox* combo, int count, int width)
{
combo->setStyle(QStyleFactory::create("Windows"));
constexpr static bool Fusion = true;
if(Fusion)
{
combo->setStyle(QStyleFactory::create("Fusion"));
combo->setStyleSheet("QComboBox { combobox-popup: 0; }");
combo->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
}
else
{
combo->setStyle(QStyleFactory::create("Windows"));
}
combo->setMaxVisibleItems(count);
combo->view()->setMinimumWidth(width);
}

View File

@ -45,6 +45,10 @@
#include <QListWidgetItem>
#include <QCheckBox>
#include <QComboBox>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QStyledItemDelegate>
#include <QStyleOptionViewItem>
#include <QQueue>
#include <QScrollArea>
#include <QScrollBar>

View File

@ -71,15 +71,7 @@ void MainWindow::init()
KIT_CONNECT(updateNextDoing());
KIT_CONNECT(updateCheckVersion(int, const QString&));
//connect(&m_audio, SIGNAL(QMediaPlayer::error(QMediaPlayer::Error)),
// SLOT([&](QMediaPlayer::Error error)
// {
// QMediaPlayer::Error err = m_audio.error();
// QString errStr = m_audio.errorString();
//
// logwarning("paly-audio file:%s, err:%d-%s ",
// filepath.toUtf8().data(), err, errStr.toUtf8().data());
// }));
connect(&m_audio, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(slot_soundError(QMediaPlayer::Error)));
m_ui->loop->clear();
m_ui->loop->addItem(CL8(""), false);
@ -148,8 +140,9 @@ void MainWindow::init()
//QString addr = kit::getMacAddress();
//std::string md5s = Tools::md5sum(addr.toLocal8Bit().data());
//logtrace("uuid=[%s][%s]", addr.toUtf8().data(), md5s.data());
logtrace("version-sdk=[%s][%s][%s]", JUDGE_VERSION_STR, JUDGE_VERSION_INFO, examJudgeVersion());
logtrace("version-kit=[%s]", KIT_VERSION_INFO);
logtrace("version-sdk=[%s][%s][%s],version-toolkit=[%s]",
JUDGE_VERSION_STR, JUDGE_VERSION_INFO, examJudgeVersion(),
KIT_VERSION_INFO);
}
@ -297,7 +290,7 @@ void MainWindow::wheelEvent(QWheelEvent *event)
event->accept();
}
void MainWindow::resizeEvent(QResizeEvent *event)
void MainWindow::resizeEvent(QResizeEvent* event)
{
QMainWindow::resizeEvent(event);
//QRect geome = geometry();
@ -638,6 +631,13 @@ void MainWindow::updateCheckVersion(int state, const QString& info)
}
}
void MainWindow::slot_soundError(QMediaPlayer::Error error)
{
QMediaPlayer::Error err = m_audio.error();
QString errStr = m_audio.errorString();
logwarning("play-audio err:%d-%d-%s", err, error, errStr.toUtf8().data());
}
void MainWindow::on_btnClearLog_clicked()
{
m_logInfo->resetLog();
@ -851,19 +851,12 @@ void MainWindow::on_displaySwitch_clicked()
{
m_realExam->switchDisplay();
//CpuOccupyInfo occ;
//
//bool usage = Tools::peerOccupyCpu(occ);
//int cores = Tools::getCpuProcessors();
//logtrace("CPU Usage:%0.4f cores=%d ", usage, cores);
const char* data = examPeerOccupy();
TOccupyInfo occ;
if(!XParser::fromAny(data, occ))
{
return;
}
logtrace("occupy=%s", data);
examFreeMemory(data);
return;
//const char* data = examPeerOccupy();
//TOccupyInfo occ;
//if(!XParser::fromAny(data, occ))
//{
// return;
//}
//logtrace("occupy=%s", data);
//examFreeMemory(data);
}

View File

@ -65,7 +65,7 @@ protected:
virtual void mousePressEvent(QMouseEvent* event) override;
virtual void wheelEvent(QWheelEvent* event) override; //鼠标滚轮滚动事件
// 当窗口尺寸改变时,会调用这个方法
virtual void resizeEvent(QResizeEvent *event) override;
virtual void resizeEvent(QResizeEvent* event) override;
signals:
void sig_init();
@ -86,7 +86,8 @@ private slots: //Q_SLOTS
void updateNextDoing();
void updateCheckVersion(int state, const QString& info);
private slots:
void slot_soundError(QMediaPlayer::Error error);
void on_btnClearLog_clicked();
void on_btnSelectTrackFile_clicked();
void on_btnRunning_clicked();

View File

@ -68,10 +68,10 @@ background-color: rgb(255, 255, 255);</string>
<widget class="QPushButton" name="btnSelectTrackFile">
<property name="geometry">
<rect>
<x>1530</x>
<x>1534</x>
<y>790</y>
<width>44</width>
<height>26</height>
<width>42</width>
<height>25</height>
</rect>
</property>
<property name="text">
@ -81,10 +81,10 @@ background-color: rgb(255, 255, 255);</string>
<widget class="QTextEdit" name="outputLog">
<property name="geometry">
<rect>
<x>932</x>
<x>933</x>
<y>644</y>
<width>642</width>
<height>143</height>
<height>144</height>
</rect>
</property>
<property name="font">
@ -106,7 +106,7 @@ p, li { white-space: pre-wrap; }
<widget class="QPushButton" name="btnClearLog">
<property name="geometry">
<rect>
<x>1500</x>
<x>1502</x>
<y>616</y>
<width>73</width>
<height>26</height>
@ -413,7 +413,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>600</x>
<y>180</y>
<width>111</width>
<width>121</width>
<height>20</height>
</rect>
</property>
@ -426,7 +426,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>600</x>
<y>163</y>
<width>111</width>
<width>121</width>
<height>20</height>
</rect>
</property>
@ -580,7 +580,7 @@ p, li { white-space: pre-wrap; }
<widget class="QPushButton" name="btnRunning">
<property name="geometry">
<rect>
<x>1500</x>
<x>1502</x>
<y>495</y>
<width>73</width>
<height>28</height>
@ -635,9 +635,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>4</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -660,9 +660,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>38</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -685,9 +685,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>38</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -710,9 +710,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>72</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -735,9 +735,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>72</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -760,9 +760,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>106</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -785,9 +785,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>106</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -810,9 +810,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>140</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -835,9 +835,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>140</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -860,9 +860,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>174</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -885,9 +885,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>174</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -913,9 +913,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>208</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -938,9 +938,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>208</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -963,9 +963,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>242</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -988,9 +988,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>276</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1013,9 +1013,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>310</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1038,9 +1038,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>242</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1063,9 +1063,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>276</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1088,9 +1088,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>310</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1115,7 +1115,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>2</x>
<y>644</y>
<width>710</width>
<width>717</width>
<height>174</height>
</rect>
</property>
@ -1144,9 +1144,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>344</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1169,9 +1169,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>344</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1194,9 +1194,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>377</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1219,9 +1219,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>377</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1244,9 +1244,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>780</x>
<x>786</x>
<y>416</y>
<width>51</width>
<width>48</width>
<height>30</height>
</rect>
</property>
@ -1263,7 +1263,7 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Arial'; font-size:10pt; font-weight:600; font-style:normal;&quot;&gt;
&lt;p align=&quot;center&quot; dir='rtl' style=&quot;-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QTextEdit" name="item00">
@ -1272,9 +1272,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>4</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1474,9 +1474,9 @@ p, li { white-space: pre-wrap; }
<widget class="Line" name="borderBottom_5">
<property name="geometry">
<rect>
<x>715</x>
<x>722</x>
<y>402</y>
<width>215</width>
<width>206</width>
<height>20</height>
</rect>
</property>
@ -1529,7 +1529,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLineEdit" name="playTimes">
<property name="geometry">
<rect>
<x>1500</x>
<x>1502</x>
<y>526</y>
<width>73</width>
<height>28</height>
@ -1542,7 +1542,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="cg_dcj_6">
<property name="geometry">
<rect>
<x>1448</x>
<x>1450</x>
<y>527</y>
<width>51</width>
<height>30</height>
@ -1555,7 +1555,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="cg_dcj_7">
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>420</y>
<width>61</width>
<height>21</height>
@ -1570,7 +1570,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>933</x>
<y>790</y>
<width>592</width>
<width>596</width>
<height>26</height>
</rect>
</property>
@ -1597,7 +1597,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="cg_dcj_9">
<property name="geometry">
<rect>
<x>1448</x>
<x>1450</x>
<y>557</y>
<width>51</width>
<height>26</height>
@ -1610,7 +1610,7 @@ p, li { white-space: pre-wrap; }
<widget class="QComboBox" name="loop">
<property name="geometry">
<rect>
<x>1500</x>
<x>1502</x>
<y>557</y>
<width>73</width>
<height>26</height>
@ -1635,7 +1635,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>400</x>
<y>277</y>
<width>315</width>
<width>322</width>
<height>2</height>
</rect>
</property>
@ -1646,7 +1646,7 @@ p, li { white-space: pre-wrap; }
<widget class="Line" name="borderRight_3">
<property name="geometry">
<rect>
<x>705</x>
<x>712</x>
<y>2</y>
<width>20</width>
<height>810</height>
@ -1662,9 +1662,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>714</x>
<x>721</x>
<y>644</y>
<width>216</width>
<width>209</width>
<height>174</height>
</rect>
</property>
@ -1699,9 +1699,9 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="pe_markGrade">
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>450</y>
<width>161</width>
<width>171</width>
<height>20</height>
</rect>
</property>
@ -1712,9 +1712,9 @@ p, li { white-space: pre-wrap; }
<widget class="QSlider" name="playSlider">
<property name="geometry">
<rect>
<x>939</x>
<y>592</y>
<width>550</width>
<x>934</x>
<y>590</y>
<width>562</width>
<height>20</height>
</rect>
</property>
@ -1877,9 +1877,9 @@ QSlider::sub-page:horizontal
</property>
<property name="geometry">
<rect>
<x>835</x>
<x>838</x>
<y>416</y>
<width>88</width>
<width>86</width>
<height>30</height>
</rect>
</property>
@ -2051,7 +2051,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>536</x>
<y>286</y>
<width>171</width>
<width>176</width>
<height>334</height>
</rect>
</property>
@ -2068,9 +2068,9 @@ p, li { white-space: pre-wrap; }
<widget class="Line" name="borderRight_4">
<property name="geometry">
<rect>
<x>520</x>
<x>526</x>
<y>278</y>
<width>20</width>
<width>10</width>
<height>366</height>
</rect>
</property>
@ -2119,7 +2119,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="perform">
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>472</y>
<width>201</width>
<height>106</height>
@ -2158,10 +2158,10 @@ p, li { white-space: pre-wrap; }
<widget class="QTableWidget" name="radarTable">
<property name="geometry">
<rect>
<x>4</x>
<x>2</x>
<y>428</y>
<width>392</width>
<height>212</height>
<width>394</width>
<height>214</height>
</rect>
</property>
</widget>
@ -2232,7 +2232,7 @@ p, li { white-space: pre-wrap; }
</rect>
</property>
<property name="text">
<string>显示切换</string>
<string>切换显示</string>
</property>
</widget>
</widget>

View File

@ -7,6 +7,25 @@ ChoiceTrackFile::ChoiceTrackFile(MainWindow* mWindow)
m_replay = mWindow->getReplay();
m_ui = mWindow->getUI();
kit::setStyleComboBox(m_ui->trackFiles, 20, m_ui->trackFiles->width());
if(kit::authAllowable())
{
bool delegate = false;
#ifndef JUDGE_OS_WIN
delegate = true;
#endif
if(delegate)
{
// 设置自定义委托
m_delegate = __KIT_NEW__(ChoiceDelegate, m_ui->trackFiles);
m_ui->trackFiles->setItemDelegate(m_delegate);
// 连接按钮点击信号到槽函数
QObject::connect(m_delegate, &ChoiceDelegate::buttonClicked, [&](const QModelIndex& index)
{
this->operateItem(index); // 此处可执行删除项或其他操作
});
}
}
}
ChoiceTrackFile::~ChoiceTrackFile()
@ -14,16 +33,16 @@ ChoiceTrackFile::~ChoiceTrackFile()
m_mWindow = nullptr;
m_replay = nullptr;
m_ui = nullptr;
__KIT_DEL__(m_delegate);
}
void ChoiceTrackFile::selectTrackFile()
{
QString filter = CL8("轨迹文件1(%1.*);;轨迹文件2(*%2);;全部文件(*.*)").arg(KIT_TRACK_FILE).arg( TRACK_SUFFIX);
QString filename = QFileDialog::getOpenFileName(m_mWindow, CL8("选择轨迹文件"),
QCoreApplication::applicationDirPath(),
filter);
if(!filename.isEmpty() && QFile::exists(filename))
{
addTrackFile(filename);
@ -64,7 +83,7 @@ void ChoiceTrackFile::loadTrack(QVector<QString>& files, const QString& dirpath)
{
continue;
}
if(mfi.isFile() && (KIT_TRACK_FILTER == "" || filepath.contains(KIT_TRACK_FILTER)) )
if(mfi.isFile() && (KIT_TRACK_FILTER == "" || filepath.contains(KIT_TRACK_FILTER)))
{
if(filepath.contains(TRACK_SUFFIX) || filepath.contains(KIT_TRACK_FILE)) //.txt
{
@ -88,7 +107,7 @@ void ChoiceTrackFile::addTrackFile(const QString& filepath)
static int s_width = 0;
s_width = std::max(s_width, font.width(filepath));
int w = m_ui->trackFiles->width();
trackView->setMinimumWidth(std::max(s_width, w) + 40);
trackView->setMinimumWidth(std::max(s_width, w) + 60);
}
void ChoiceTrackFile::loadTrackFiles(const QString& dirpath)
@ -139,3 +158,55 @@ QString ChoiceTrackFile::trackFiles_highlighted(int index)
QString data = m_ui->trackFiles->itemData(index).toString();
return data;
}
void ChoiceTrackFile::operateItem(const QModelIndex& index)
{
int idx = index.row();
TASSERT_VOID(idx >= 0 && idx < m_ui->trackFiles->count(), "");
QString text = m_ui->trackFiles->itemText(idx);
QString data = m_ui->trackFiles->itemData(idx).toString();
QDir dir = QFileInfo(text).absoluteDir();
QDir dirPrev = QFileInfo(dir.path()).absoluteDir();
QString affirm = CL8("确定删除轨迹:") + dir.path() + CL8("/");
int id = QMessageBox::question(m_mWindow, CL8("提示"), affirm, CL8("删除当前"), CL8("删除上一层"), CL8("取消删除"));
//int id = 0;
if(0 == id)
{
m_ui->trackFiles->removeItem(idx);
dir.removeRecursively();
logdebug("remove current path=%s", dir.path().toUtf8().data());
if(dirPrev.isEmpty(QDir::AllEntries | QDir::NoDotAndDotDot))
{
dirPrev.removeRecursively();
logtrace("remove prev path=%s", dirPrev.path().toUtf8().data());
}
}
else if(1 == id)
{
for(int i = 0; i < m_ui->trackFiles->count(); i++)
{
QString text_ = m_ui->trackFiles->itemText(i);
QString data_ = m_ui->trackFiles->itemData(i).toString();
QDir dir_ = QFileInfo(text_).absoluteDir();
QDir dirPrev_ = QFileInfo(dir_.path()).absoluteDir();
if(dirPrev_.path() == dirPrev.path())
{
m_ui->trackFiles->removeItem(i);
dir_.removeRecursively();
logdebug("remove current path=%s", dir_.path().toUtf8().data());
i--;
}
}
if(dirPrev.isEmpty(QDir::AllEntries | QDir::NoDotAndDotDot))
{
dirPrev.removeRecursively();
logtrace("remove prev path=%s", dirPrev.path().toUtf8().data());
}
}
}

View File

@ -1,7 +1,6 @@
#ifndef CHOICETRACKFILE_H
#define CHOICETRACKFILE_H
#include "HToolkit.h"
#include "IToolkit.h"
#include "ReplayWrapper.h"
@ -9,6 +8,7 @@
class MainWindow;
namespace Ui { class MainWindow; }
class ChoiceDelegate;
class ChoiceTrackFile
{
public:
@ -24,10 +24,56 @@ public:
QString trackFiles_currentIndexChanged(int index);
QString trackFiles_highlighted(int index);
void operateItem(const QModelIndex& index);
private:
ReplayWrapper* m_replay = nullptr;
Ui::MainWindow* m_ui = nullptr;
MainWindow* m_mWindow = nullptr;
ChoiceDelegate* m_delegate = nullptr;
};
class ChoiceDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit ChoiceDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent)
{
}
virtual ~ChoiceDelegate()
{
}
// 重写绘制方法
void paint(QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
QStyledItemDelegate::paint(painter, option, index); // 绘制默认内容(文本/图标)
QRect btnRect = option.rect.adjusted(option.rect.width() - 35, 1, -1, -1); // 定义按钮区域(右侧 20x20 区域)
QStyleOptionButton button; // 绘制按钮样式
button.rect = btnRect;
button.text = CL8("删除"); // 按钮显示为关闭符号
button.state = QStyle::State_Enabled;
QApplication::style()->drawControl(QStyle::CE_PushButton, &button, painter); //渲染按钮
}
// 重写事件处理
bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index) override
{
if(event->type() == QEvent::MouseButtonPress)
{
QMouseEvent* mev = static_cast<QMouseEvent*>(event);
QRect btnRect = option.rect.adjusted(option.rect.width() - 35, 1, -1, -1);
if(btnRect.contains(mev->pos())) // 判断是否点击了按钮区域
{
emit buttonClicked(index); // 触发自定义信号
return true; // 事件已处理
}
}
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
signals:
// 自定义信号:按钮被点击时触发,传递项的索引
void buttonClicked(const QModelIndex& index);
};
#endif // CHOICETRACKFILE_H

View File

@ -12,6 +12,7 @@ ShowBeginExam::ShowBeginExam(MainWindow* mWindow)
m_ui->item06,m_ui->item07,m_ui->item08,m_ui->item09,m_ui->item10,m_ui->item11,
m_ui->item12,m_ui->item13,m_ui->item14,m_ui->item15,m_ui->item16,m_ui->item17,
m_ui->item18,m_ui->item19,m_ui->item20,m_ui->item21,m_ui->item22,m_ui->item23};
}
ShowBeginExam::~ShowBeginExam()
@ -115,7 +116,7 @@ void ShowBeginExam::updateBeginExam(const QString& info)
}
else
{
TASSERT(value.ddkssj == 0 && value.yklc == 0 && value.kfxm.empty(), "");
TASSERT(value.ddkssj == 0 && value.yklc == 0, "");
}
if(value.sczb)

View File

@ -25,8 +25,8 @@ void ShowInitExam::updateInitExam(const QString& info)
m_ui->initData->clear();
TASSERT(m_ui->initData->count() == 0, "");
m_ui->initData->addItem(CL8("评判版本") + value.sdkver.c_str(), JUDGE_STR(sdkver));
m_ui->initData->addItem(CL8("外壳版本") + value.appver.c_str(), JUDGE_STR(appver));
m_ui->initData->addItem(CL8("评判版本") + value.sdkver.c_str(), JUDGE_STR(sdkver));
m_ui->initData->addItem(CL8("外壳版本") + value.appver.c_str(), JUDGE_STR(appver));
m_ui->initData->addItem(CL8("考试科目:") + subject, JUDGE_STR(subject));
m_ui->initData->addItem(CL8("考车号码:") + kit::toString(value.kchm) + CL8("号车"), JUDGE_STR(kchm));
m_ui->initData->addItem(CL8("考试车型:") + value.kscx.c_str(), JUDGE_STR(kscx));

View File

@ -26,7 +26,7 @@ import { examJudgeVersion } from './judgeSDK/api';
@Component
struct Index {
@State carNum: string = ''
@State version: string = '2025.04.23.01'
@State version: string = '2025.04.24.01'
@State judgeVersion: string = ''
@State url: string = ''
@State hasAuth: boolean = false;

View File

@ -352,12 +352,17 @@ struct Index {
//项目开始数据是否上传过
isUpload,
}
// 夜考时
if (this.mode === 2 && no2 != 13) {
currentProject.ykType = isRequired ? "1" : "3"
currentProject.isEnd = !allItems.includes(no2 + '')
}
this.projectsObj[no2*1] = currentProject
this.projectsCenterObj[txt2] = currentProject
this.projects.push(currentProject);
//真实监管下发考试项目
if (isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2 + ''))) {
// 真实监管下发考试项目, 夜考模式、满分学习不进此逻辑
if (isInExam && this.mode !== 2 && this.mode !== 5 && !(kStringArr.includes(txt2) || kStringArr.includes(no2 + ''))) {
this.projectsObj[no2*1].type = '3'
this.projectsObj[no2*1].isUpload = true
this.projectsObj[no2*1].isEnd = true
@ -1039,19 +1044,14 @@ struct Index {
switch (type) {
case '1':
return '#E6DECF';
break;
case '2':
return '#FFAD33';
break;
case '3':
return '#ff109d0a';
break;
case '4':
return '#FF7566';
break;
case '5':
return '#FF7566'
break;
default:
return '#E6DECF';
break;