fix(nmNum): 移除网格数量统计并居中显示求解耗时

(cherry picked from commit 9ba4f2e0cc)
develop
lvjunjie 2 days ago
parent 921c41dc02
commit 87641c3bc6

Binary file not shown.

@ -3551,10 +3551,8 @@ No valid error was returned; keep the last accepted result and reduce the step.<
<translation>求解已完成且结果已提交,但无法打开结果窗口。</translation> <translation>求解已完成且结果已提交,但无法打开结果窗口。</translation>
</message> </message>
<message> <message>
<source>Grid count: %1 <source>Solve time: %1 ms</source>
Solve time: %2 ms</source> <translation>本次求解耗时:%1 ms</translation>
<translation>网格数量:%1
本次求解耗时:%2 ms</translation>
</message> </message>
</context> </context>
<context> <context>

@ -48,8 +48,6 @@ class NMCALCULATION_EXPORT nmCalculationDllPebiSolverTask : public QThread {
bool wasSuccessful() const; bool wasSuccessful() const;
/** @brief 获取本次DLL内部求解耗时,单位为毫秒。 */ /** @brief 获取本次DLL内部求解耗时,单位为毫秒。 */
int getSolveTimeMs() const; int getSolveTimeMs() const;
/** @brief 获取本次求解的PEBI网格数量。 */
int getPebiCount() const;
/** @brief 返回当前代码已识别的失败原因;成功或主动停止时为空。 */ /** @brief 返回当前代码已识别的失败原因;成功或主动停止时为空。 */
QString getFailureReason() const; QString getFailureReason() const;
/** @brief 请求协作式停止;DLL 正在执行时会在返回后丢弃结果。 */ /** @brief 请求协作式停止;DLL 正在执行时会在返回后丢弃结果。 */
@ -138,8 +136,6 @@ class NMCALCULATION_EXPORT nmCalculationDllPebiSolverTask : public QThread {
bool m_lastRunSucceeded; ///< run() 保存的执行状态,供等待线程安全读取。 bool m_lastRunSucceeded; ///< run() 保存的执行状态,供等待线程安全读取。
/** @brief 本次DLL内部求解耗时,单位为毫秒。 */ /** @brief 本次DLL内部求解耗时,单位为毫秒。 */
int m_nSolveTimeMs; int m_nSolveTimeMs;
/** @brief 本次求解的PEBI网格数量。 */
int m_nPebiCount;
QString m_sFailureReason; ///< 当前代码已识别的首个失败原因。 QString m_sFailureReason; ///< 当前代码已识别的首个失败原因。
QString m_sAutoFitTargetWellCode; ///< 自动拟合目标井 WellCode;空值表示保存完整结果。 QString m_sAutoFitTargetWellCode; ///< 自动拟合目标井 WellCode;空值表示保存完整结果。
QVector<QVector<double> > m_autoFitResultPressure; ///< 目标井原始压力结果。 QVector<QVector<double> > m_autoFitResultPressure; ///< 目标井原始压力结果。

@ -113,7 +113,6 @@ struct nmPebiGridResult
/** @brief 创建空结果;只有 m_bSucceeded 为 true 时才允许提交。 */ /** @brief 创建空结果;只有 m_bSucceeded 为 true 时才允许提交。 */
nmPebiGridResult() nmPebiGridResult()
: m_pUnstructuredGrid(nullptr), : m_pUnstructuredGrid(nullptr),
m_nPebiCount(-1),
m_bSucceeded(false) m_bSucceeded(false)
{ {
} }
@ -121,7 +120,6 @@ struct nmPebiGridResult
HX_NWTM_GRID_OUTPUT1 m_oGridOutput1; ///< 网格 DLL 主输出。 HX_NWTM_GRID_OUTPUT1 m_oGridOutput1; ///< 网格 DLL 主输出。
HX_NWTM_GRID_OUTPUT2 m_oGridOutput2; ///< 网格 DLL 辅助输出。 HX_NWTM_GRID_OUTPUT2 m_oGridOutput2; ///< 网格 DLL 辅助输出。
vtkSmartPointer<vtkUnstructuredGrid> m_pUnstructuredGrid; ///< 局部构造的 VTK 网格。 vtkSmartPointer<vtkUnstructuredGrid> m_pUnstructuredGrid; ///< 局部构造的 VTK 网格。
int m_nPebiCount; ///< DLL 返回的 PEBI 单元数量。
bool m_bSucceeded; ///< DLL 和 VTK 转换是否全部成功。 bool m_bSucceeded; ///< DLL 和 VTK 转换是否全部成功。
}; };
@ -209,7 +207,6 @@ public:
quint64 nGridInputRevision, quint64 nGridInputRevision,
HX_NWTM_GRID_OUTPUT1& oGridOutput1, HX_NWTM_GRID_OUTPUT1& oGridOutput1,
HX_NWTM_GRID_OUTPUT2& oGridOutput2, HX_NWTM_GRID_OUTPUT2& oGridOutput2,
int& nPebiCount,
const QAtomicInt* pCancelRequested = NULL) const; const QAtomicInt* pCancelRequested = NULL) const;
/** @brief 主线程快速判断缓存归属和版本,不复制大型 DLL 输出。 */ /** @brief 主线程快速判断缓存归属和版本,不复制大型 DLL 输出。 */
bool isCurrentGridAvailableFor(const nmDataAnalyzeManager* pDataManager, bool isCurrentGridAvailableFor(const nmDataAnalyzeManager* pDataManager,
@ -220,8 +217,6 @@ public:
HX_NWTM_GRID_OUTPUT1 getGridOutput1(); HX_NWTM_GRID_OUTPUT1 getGridOutput1();
/** @brief 在线程锁保护下返回最近一次网格输出 p2 的副本。 */ /** @brief 在线程锁保护下返回最近一次网格输出 p2 的副本。 */
HX_NWTM_GRID_OUTPUT2 getGridOutput2(); HX_NWTM_GRID_OUTPUT2 getGridOutput2();
/** @brief 返回最近一次网格划分生成的 PEBI 单元数量。 */
int getPebiCount() const;
private: private:
static nmCalculationPebiGrid* m_instance; ///< 进程内共享的 PEBI 网格服务实例。 static nmCalculationPebiGrid* m_instance; ///< 进程内共享的 PEBI 网格服务实例。
@ -229,7 +224,6 @@ private:
HX_NWTM_GRID_OUTPUT1 p1; ///< 最近一次网格 DLL 主输出。 HX_NWTM_GRID_OUTPUT1 p1; ///< 最近一次网格 DLL 主输出。
HX_NWTM_GRID_OUTPUT2 p2; ///< 最近一次网格 DLL 辅助输出。 HX_NWTM_GRID_OUTPUT2 p2; ///< 最近一次网格 DLL 辅助输出。
double m_dGridControl; ///< 对应 HX_NWTM_GRID_INPUT::GridControl。 double m_dGridControl; ///< 对应 HX_NWTM_GRID_INPUT::GridControl。
int m_nPebiCount; ///< 最近一次成功网格的单元数量,未生成时为 -1。
quint64 m_nCachedGridInputRevision; ///< 单例 DLL 输出对应的网格输入版本。 quint64 m_nCachedGridInputRevision; ///< 单例 DLL 输出对应的网格输入版本。
/** @brief 当前单例缓存所属的数据管理器,不拥有对象。 */ /** @brief 当前单例缓存所属的数据管理器,不拥有对象。 */
nmDataAnalyzeManager* m_pDataManager; nmDataAnalyzeManager* m_pDataManager;

@ -255,11 +255,9 @@ class NM_SUB_WND_EXPORT nmSubWndMain : public iSubWndBaseFit {
void schedulePendingResultWidgets(); void schedulePendingResultWidgets();
// 根据结果页面是否准备成功显示本次求解的最终提示。 // 根据结果页面是否准备成功显示本次求解的最终提示。
void showSolverResultCompletion(bool bResultWindowReady, void showSolverResultCompletion(bool bResultWindowReady,
int nPebiCount,
int nSolveTimeMs); int nSolveTimeMs);
// 先隐藏求解进度框,再排队处理结果界面。 // 先隐藏求解进度框,再排队处理结果界面。
void scheduleSolverResultCompletion(bool bSucceeded, void scheduleSolverResultCompletion(bool bSucceeded,
int nPebiCount,
int nSolveTimeMs, int nSolveTimeMs,
bool bInputChanged, bool bInputChanged,
const QString& sFailureReason); const QString& sFailureReason);
@ -312,13 +310,11 @@ private:
bool m_bPendingResultWidgetRefresh; ///< 正在等待下一轮事件填充首次结果页面。 bool m_bPendingResultWidgetRefresh; ///< 正在等待下一轮事件填充首次结果页面。
bool m_bPendingResultCompletionMessage; ///< 首次页面填充后再显示求解结果提示。 bool m_bPendingResultCompletionMessage; ///< 首次页面填充后再显示求解结果提示。
bool m_bPendingResultWindowReady; ///< 延迟填充是否成功创建全部结果页面。 bool m_bPendingResultWindowReady; ///< 延迟填充是否成功创建全部结果页面。
int m_nPendingResultPebiCount; ///< 延迟提示所需的网格数量。
int m_nPendingResultSolveTimeMs; ///< 延迟提示所需的求解耗时。 int m_nPendingResultSolveTimeMs; ///< 延迟提示所需的求解耗时。
bool m_bSolverResultCompletionPending; ///< 等待进度框隐藏后处理求解结果。 bool m_bSolverResultCompletionPending; ///< 等待进度框隐藏后处理求解结果。
bool m_bPendingSolverSucceeded; ///< 待处理求解结果是否成功。 bool m_bPendingSolverSucceeded; ///< 待处理求解结果是否成功。
bool m_bPendingSolverInputChanged; ///< 输入变化导致本次旧结果被丢弃。 bool m_bPendingSolverInputChanged; ///< 输入变化导致本次旧结果被丢弃。
QString m_sPendingSolverFailureReason; ///< 当前代码已识别的待显示失败原因。 QString m_sPendingSolverFailureReason; ///< 当前代码已识别的待显示失败原因。
int m_nPendingSolverPebiCount; ///< 待显示的网格数量。
int m_nPendingSolverTimeMs; ///< 待显示的求解耗时。 int m_nPendingSolverTimeMs; ///< 待显示的求解耗时。
bool m_bSolverStartPending; ///< 进度框已显示,输入正分批捕获或任务等待启动。 bool m_bSolverStartPending; ///< 进度框已显示,输入正分批捕获或任务等待启动。
bool m_bSolverCancelRequested; ///< 已向当前任务发送停止请求,忽略后续阶段信号。 bool m_bSolverCancelRequested; ///< 已向当前任务发送停止请求,忽略后续阶段信号。

@ -618,7 +618,6 @@ nmCalculationDllPebiSolverTask::nmCalculationDllPebiSolverTask(
m_nResultInputRevision(0), m_nResultInputRevision(0),
m_lastRunSucceeded(false), m_lastRunSucceeded(false),
m_nSolveTimeMs(-1), m_nSolveTimeMs(-1),
m_nPebiCount(-1),
m_dPendingScalarMin(0.0), m_dPendingScalarMin(0.0),
m_dPendingScalarMax(0.0), m_dPendingScalarMax(0.0),
m_bPendingFullResultReady(false), m_bPendingFullResultReady(false),
@ -671,7 +670,6 @@ nmCalculationDllPebiSolverTask::~nmCalculationDllPebiSolverTask()
void nmCalculationDllPebiSolverTask::run() void nmCalculationDllPebiSolverTask::run()
{ {
m_nSolveTimeMs = -1; m_nSolveTimeMs = -1;
m_nPebiCount = -1;
bool bSucceeded = false; bool bSucceeded = false;
try { try {
bSucceeded = this->execute(); bSucceeded = this->execute();
@ -1107,15 +1105,12 @@ bool nmCalculationDllPebiSolverTask::captureInputSnapshot(
m_pInputSnapshot->m_bMayUseCachedGrid) { m_pInputSnapshot->m_bMayUseCachedGrid) {
HX_NWTM_GRID_OUTPUT1 oGridOutput1; HX_NWTM_GRID_OUTPUT1 oGridOutput1;
HX_NWTM_GRID_OUTPUT2 oGridOutput2; HX_NWTM_GRID_OUTPUT2 oGridOutput2;
int nPebiCount = -1;
if(pGridService->copyCurrentGridFor(m_pDataManager, if(pGridService->copyCurrentGridFor(m_pDataManager,
m_nGridInputRevision, m_nGridInputRevision,
oGridOutput1, oGridOutput1,
oGridOutput2, oGridOutput2)) {
nPebiCount)) {
m_pInputSnapshot->m_oGridResult.m_oGridOutput1 = oGridOutput1; m_pInputSnapshot->m_oGridResult.m_oGridOutput1 = oGridOutput1;
m_pInputSnapshot->m_oGridResult.m_oGridOutput2 = oGridOutput2; m_pInputSnapshot->m_oGridResult.m_oGridOutput2 = oGridOutput2;
m_pInputSnapshot->m_oGridResult.m_nPebiCount = nPebiCount;
m_pInputSnapshot->m_oGridResult.m_bSucceeded = true; m_pInputSnapshot->m_oGridResult.m_bSucceeded = true;
} else { } else {
m_pInputSnapshot->m_bRequiresGridCalculation = true; m_pInputSnapshot->m_bRequiresGridCalculation = true;
@ -1159,7 +1154,6 @@ bool nmCalculationDllPebiSolverTask::prepareManualInput()
m_nGridInputRevision, m_nGridInputRevision,
oGridResult.m_oGridOutput1, oGridResult.m_oGridOutput1,
oGridResult.m_oGridOutput2, oGridResult.m_oGridOutput2,
oGridResult.m_nPebiCount,
&m_nCancelRequested)) { &m_nCancelRequested)) {
oGridResult.m_bSucceeded = true; oGridResult.m_bSucceeded = true;
@ -1199,11 +1193,6 @@ int nmCalculationDllPebiSolverTask::getSolveTimeMs() const
return m_nSolveTimeMs; return m_nSolveTimeMs;
} }
int nmCalculationDllPebiSolverTask::getPebiCount() const
{
return m_nPebiCount;
}
QString nmCalculationDllPebiSolverTask::getFailureReason() const QString nmCalculationDllPebiSolverTask::getFailureReason() const
{ {
return m_sFailureReason; return m_sFailureReason;
@ -1419,7 +1408,6 @@ bool nmCalculationDllPebiSolverTask::execPebiMode()
oModelInput, oModelInput,
m_pInputSnapshot->m_oGridInput.m_sLicensePath m_pInputSnapshot->m_oGridInput.m_sLicensePath
.toStdString()); .toStdString());
m_nPebiCount = oGridResult.m_nPebiCount;
m_nSolveTimeMs = pfnGetSolveTime(); m_nSolveTimeMs = pfnGetSolveTime();
} catch(const std::exception& e) { } catch(const std::exception& e) {
qWarning() << QString("C++ Exception during HX_NWTM_MODEL call: %1") qWarning() << QString("C++ Exception during HX_NWTM_MODEL call: %1")

@ -287,8 +287,7 @@ nmCalculationPebiGrid* nmCalculationPebiGrid::getInstance()
} }
nmCalculationPebiGrid::nmCalculationPebiGrid() nmCalculationPebiGrid::nmCalculationPebiGrid()
: m_nPebiCount(-1), : m_nCachedGridInputRevision(0),
m_nCachedGridInputRevision(0),
m_pDataManager(nullptr) m_pDataManager(nullptr)
{ {
// 默认值来自HX_NWTM_GRID_INPUT构造函数 // 默认值来自HX_NWTM_GRID_INPUT构造函数
@ -343,7 +342,6 @@ void nmCalculationPebiGrid::clearGridData(
p1 = HX_NWTM_GRID_OUTPUT1(); p1 = HX_NWTM_GRID_OUTPUT1();
p2 = HX_NWTM_GRID_OUTPUT2(); p2 = HX_NWTM_GRID_OUTPUT2();
m_dGridControl = p0.GridControl; m_dGridControl = p0.GridControl;
m_nPebiCount = -1;
m_nCachedGridInputRevision = 0; m_nCachedGridInputRevision = 0;
m_pDataManager = nullptr; m_pDataManager = nullptr;
} }
@ -353,7 +351,6 @@ bool nmCalculationPebiGrid::copyCurrentGridFor(
quint64 nGridInputRevision, quint64 nGridInputRevision,
HX_NWTM_GRID_OUTPUT1& oGridOutput1, HX_NWTM_GRID_OUTPUT1& oGridOutput1,
HX_NWTM_GRID_OUTPUT2& oGridOutput2, HX_NWTM_GRID_OUTPUT2& oGridOutput2,
int& nPebiCount,
const QAtomicInt* pCancelRequested) const const QAtomicInt* pCancelRequested) const
{ {
nmInterruptibleMutexLocker oGridLocker; nmInterruptibleMutexLocker oGridLocker;
@ -378,7 +375,6 @@ bool nmCalculationPebiGrid::copyCurrentGridFor(
return false; return false;
} }
oGridOutput2 = p2; oGridOutput2 = p2;
nPebiCount = m_nPebiCount;
return true; return true;
} }
@ -927,12 +923,6 @@ HX_NWTM_GRID_OUTPUT2 nmCalculationPebiGrid::getGridOutput2()
return p2; return p2;
} }
int nmCalculationPebiGrid::getPebiCount() const
{
QMutexLocker oLocker(&s_oPebiGridMutex);
return m_nPebiCount;
}
vtkSmartPointer<vtkUnstructuredGrid> nmCalculationPebiGrid::createPebiUnstructuredGrid( vtkSmartPointer<vtkUnstructuredGrid> nmCalculationPebiGrid::createPebiUnstructuredGrid(
const HX_NWTM_GRID_OUTPUT1& P1, const HX_NWTM_GRID_OUTPUT1& P1,
const QAtomicInt* pCancelRequested) const QAtomicInt* pCancelRequested)
@ -1862,15 +1852,10 @@ bool nmCalculationPebiGrid::calculateSnapshot(
return false; return false;
} }
typedef int (*GetIntValueFunc)();
HX_NWTM_GRID_Func pfnGenerateGrid = HX_NWTM_GRID_Func pfnGenerateGrid =
reinterpret_cast<HX_NWTM_GRID_Func>( reinterpret_cast<HX_NWTM_GRID_Func>(
GetProcAddress(hGridModule, "HX_NWTM_GRID")); GetProcAddress(hGridModule, "HX_NWTM_GRID"));
GetIntValueFunc pfnGetPebiCount = if(pfnGenerateGrid == nullptr) {
reinterpret_cast<GetIntValueFunc>(
GetProcAddress(hGridModule, "getPEBInum"));
if(pfnGenerateGrid == nullptr || pfnGetPebiCount == nullptr) {
qWarning() << "Failed to resolve HX_NWTM grid functions. Error code:" qWarning() << "Failed to resolve HX_NWTM grid functions. Error code:"
<< GetLastError(); << GetLastError();
FreeLibrary(hGridModule); FreeLibrary(hGridModule);
@ -1892,7 +1877,6 @@ bool nmCalculationPebiGrid::calculateSnapshot(
return false; return false;
} }
nmCalculationUtils::cleanupPebiGridDebugFiles(); nmCalculationUtils::cleanupPebiGridDebugFiles();
oResult.m_nPebiCount = pfnGetPebiCount();
// 后续 VTK 构造只读取本次局部输出,无需继续占用进程级 DLL 锁。 // 后续 VTK 构造只读取本次局部输出,无需继续占用进程级 DLL 锁。
FreeLibrary(hGridModule); FreeLibrary(hGridModule);
@ -1949,7 +1933,6 @@ void nmCalculationPebiGrid::commitOutputCache(
p1 = oResult.m_oGridOutput1; p1 = oResult.m_oGridOutput1;
p2 = oResult.m_oGridOutput2; p2 = oResult.m_oGridOutput2;
m_dGridControl = oSnapshot.m_oGridInput.GridControl; m_dGridControl = oSnapshot.m_oGridInput.GridControl;
m_nPebiCount = oResult.m_nPebiCount;
m_nCachedGridInputRevision = oSnapshot.m_nGridInputRevision; m_nCachedGridInputRevision = oSnapshot.m_nGridInputRevision;
m_pDataManager = pDataManager; m_pDataManager = pDataManager;
} }

@ -157,12 +157,10 @@ nmSubWndMain::nmSubWndMain(QWidget *parent, QString sExt) :
m_bPendingResultWidgetRefresh = false; m_bPendingResultWidgetRefresh = false;
m_bPendingResultCompletionMessage = false; m_bPendingResultCompletionMessage = false;
m_bPendingResultWindowReady = false; m_bPendingResultWindowReady = false;
m_nPendingResultPebiCount = -1;
m_nPendingResultSolveTimeMs = -1; m_nPendingResultSolveTimeMs = -1;
m_bSolverResultCompletionPending = false; m_bSolverResultCompletionPending = false;
m_bPendingSolverSucceeded = false; m_bPendingSolverSucceeded = false;
m_bPendingSolverInputChanged = false; m_bPendingSolverInputChanged = false;
m_nPendingSolverPebiCount = -1;
m_nPendingSolverTimeMs = -1; m_nPendingSolverTimeMs = -1;
m_bSolverStartPending = false; m_bSolverStartPending = false;
m_bSolverCancelRequested = false; m_bSolverCancelRequested = false;
@ -1881,7 +1879,6 @@ void nmSubWndMain::continueSolverInputCapture()
m_pSolverFitting = nullptr; m_pSolverFitting = nullptr;
} else { } else {
scheduleSolverResultCompletion(false, scheduleSolverResultCompletion(false,
-1,
-1, -1,
bInputChanged, bInputChanged,
sFailureReason); sFailureReason);
@ -2089,7 +2086,6 @@ bool nmSubWndMain::mergeAnaResultToFitting()
m_pPendingResultFitting = nullptr; m_pPendingResultFitting = nullptr;
m_bPendingResultCompletionMessage = false; m_bPendingResultCompletionMessage = false;
m_bPendingResultWindowReady = false; m_bPendingResultWindowReady = false;
m_nPendingResultPebiCount = -1;
m_nPendingResultSolveTimeMs = -1; m_nPendingResultSolveTimeMs = -1;
if(pInstance->getGridType() == NM_Grid_PEBI) { if(pInstance->getGridType() == NM_Grid_PEBI) {
@ -2186,14 +2182,11 @@ void nmSubWndMain::showPendingSolverResultCompletion()
} }
const bool bResultWindowReady = m_bPendingResultWindowReady; const bool bResultWindowReady = m_bPendingResultWindowReady;
const int nPebiCount = m_nPendingResultPebiCount;
const int nSolveTimeMs = m_nPendingResultSolveTimeMs; const int nSolveTimeMs = m_nPendingResultSolveTimeMs;
m_bPendingResultCompletionMessage = false; m_bPendingResultCompletionMessage = false;
m_bPendingResultWindowReady = false; m_bPendingResultWindowReady = false;
m_nPendingResultPebiCount = -1;
m_nPendingResultSolveTimeMs = -1; m_nPendingResultSolveTimeMs = -1;
showSolverResultCompletion(bResultWindowReady, showSolverResultCompletion(bResultWindowReady,
nPebiCount,
nSolveTimeMs); nSolveTimeMs);
} }
@ -2427,7 +2420,6 @@ bool nmSubWndMain::on_calculationFinished(
void nmSubWndMain::scheduleSolverResultCompletion( void nmSubWndMain::scheduleSolverResultCompletion(
bool bSucceeded, bool bSucceeded,
int nPebiCount,
int nSolveTimeMs, int nSolveTimeMs,
bool bInputChanged, bool bInputChanged,
const QString& sFailureReason) const QString& sFailureReason)
@ -2437,7 +2429,6 @@ void nmSubWndMain::scheduleSolverResultCompletion(
m_bPendingSolverSucceeded = bSucceeded; m_bPendingSolverSucceeded = bSucceeded;
m_bPendingSolverInputChanged = bInputChanged; m_bPendingSolverInputChanged = bInputChanged;
m_sPendingSolverFailureReason = sFailureReason; m_sPendingSolverFailureReason = sFailureReason;
m_nPendingSolverPebiCount = nPebiCount;
m_nPendingSolverTimeMs = nSolveTimeMs; m_nPendingSolverTimeMs = nSolveTimeMs;
// 当前完成信号栈只登记后续工作;隐藏和结果刷新各占一轮独立事件。 // 当前完成信号栈只登记后续工作;隐藏和结果刷新各占一轮独立事件。
@ -2461,13 +2452,11 @@ void nmSubWndMain::completePendingSolverResult()
const bool bSucceeded = m_bPendingSolverSucceeded; const bool bSucceeded = m_bPendingSolverSucceeded;
const bool bInputChanged = m_bPendingSolverInputChanged; const bool bInputChanged = m_bPendingSolverInputChanged;
const QString sFailureReason = m_sPendingSolverFailureReason; const QString sFailureReason = m_sPendingSolverFailureReason;
const int nPebiCount = m_nPendingSolverPebiCount;
const int nSolveTimeMs = m_nPendingSolverTimeMs; const int nSolveTimeMs = m_nPendingSolverTimeMs;
m_bSolverResultCompletionPending = false; m_bSolverResultCompletionPending = false;
m_bPendingSolverSucceeded = false; m_bPendingSolverSucceeded = false;
m_bPendingSolverInputChanged = false; m_bPendingSolverInputChanged = false;
m_sPendingSolverFailureReason.clear(); m_sPendingSolverFailureReason.clear();
m_nPendingSolverPebiCount = -1;
m_nPendingSolverTimeMs = -1; m_nPendingSolverTimeMs = -1;
bool bResultWindowReady = false; bool bResultWindowReady = false;
@ -2494,11 +2483,9 @@ void nmSubWndMain::completePendingSolverResult()
m_bPendingResultWidgetRefresh) { m_bPendingResultWidgetRefresh) {
// 首次结果页尚未填充,最终提示必须等页面真实创建结果返回后再显示。 // 首次结果页尚未填充,最终提示必须等页面真实创建结果返回后再显示。
m_bPendingResultCompletionMessage = true; m_bPendingResultCompletionMessage = true;
m_nPendingResultPebiCount = nPebiCount;
m_nPendingResultSolveTimeMs = nSolveTimeMs; m_nPendingResultSolveTimeMs = nSolveTimeMs;
} else if(bSucceeded) { } else if(bSucceeded) {
showSolverResultCompletion(bResultWindowReady, showSolverResultCompletion(bResultWindowReady,
nPebiCount,
nSolveTimeMs); nSolveTimeMs);
} }
@ -2511,14 +2498,21 @@ void nmSubWndMain::completePendingSolverResult()
void nmSubWndMain::showSolverResultCompletion( void nmSubWndMain::showSolverResultCompletion(
bool bResultWindowReady, bool bResultWindowReady,
int nPebiCount,
int nSolveTimeMs) int nSolveTimeMs)
{ {
if(bResultWindowReady && nPebiCount >= 0 && nSolveTimeMs >= 0) { // 完成提示只显示 DLL 返回的本次求解耗时。
QMessageBox::information(this, tr("Solver completed"), if(bResultWindowReady && nSolveTimeMs >= 0) {
tr("Grid count: %1\nSolve time: %2 ms") QMessageBox oMessageBox(QMessageBox::Information, tr("Solver completed"),
.arg(nPebiCount) tr("Solve time: %1 ms").arg(nSolveTimeMs),
.arg(nSolveTimeMs)); QMessageBox::Ok, this);
// 单行耗时在提示区域水平、垂直居中,与左侧图标对齐。
QLabel* pMessageLabel = oMessageBox.findChild<QLabel*>("qt_msgbox_label");
if(pMessageLabel != nullptr) {
pMessageLabel->setAlignment(Qt::AlignCenter);
pMessageLabel->setMinimumHeight(
oMessageBox.iconPixmap().height());
}
oMessageBox.exec();
} else if(!bResultWindowReady) { } else if(!bResultWindowReady) {
QMessageBox::warning( QMessageBox::warning(
this, this,
@ -2536,7 +2530,6 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed)
return; return;
} }
int nPebiCount = pTask != nullptr ? pTask->getPebiCount() : -1;
int nSolveTimeMs = pTask != nullptr ? pTask->getSolveTimeMs() : -1; int nSolveTimeMs = pTask != nullptr ? pTask->getSolveTimeMs() : -1;
const bool bCancelled = pTask->wasCancelled(); const bool bCancelled = pTask->wasCancelled();
QString sFailureReason = pTask->getFailureReason(); QString sFailureReason = pTask->getFailureReason();
@ -2575,7 +2568,6 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed)
m_bSolverCancelRequested = false; m_bSolverCancelRequested = false;
} else { } else {
scheduleSolverResultCompletion(isSuccessed, scheduleSolverResultCompletion(isSuccessed,
nPebiCount,
nSolveTimeMs, nSolveTimeMs,
bInputChanged, bInputChanged,
sFailureReason); sFailureReason);

Loading…
Cancel
Save