单进程运行,批次倒序,列表展示加速,其他优化
This commit is contained in:
parent
e45851d2b3
commit
9adfea89d3
@ -15,17 +15,17 @@
|
||||
#include "qpixmapcache.h"
|
||||
#include "JSONDocUtil.h"
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include "PreVerifyWidget.h"
|
||||
|
||||
|
||||
DefectViewCustom::DefectViewCustom(QWidget* parent) {
|
||||
QImageReader::setAllocationLimit(0);
|
||||
setParent(parent);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
||||
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
|
||||
setRenderHint(QPainter::Antialiasing);
|
||||
setDragMode(QGraphicsView::RubberBandDrag);
|
||||
setDragMode(QGraphicsView::ScrollHandDrag);
|
||||
setFrameShape(QFrame::NoFrame);
|
||||
|
||||
m_scene.setBackgroundBrush(QBrush(QColor(Qt::white)));
|
||||
|
@ -9,12 +9,11 @@
|
||||
#include "logger.h"
|
||||
#include "QPushButton"
|
||||
#include "QLabel"
|
||||
#include "PreVerifyWidget.h"
|
||||
#include <opencv2/opencv.hpp>
|
||||
|
||||
|
||||
|
||||
|
||||
class PreVerifyWidget;
|
||||
class DefectViewCustom : public QGraphicsView {
|
||||
Q_OBJECT
|
||||
LOG4QT_DECLARE_QCLASS_LOGGER
|
||||
|
Binary file not shown.
@ -1,17 +1,24 @@
|
||||
#include "MainWidget.h"
|
||||
#include "QFont"
|
||||
#include "qmessagebox.h"
|
||||
|
||||
|
||||
|
||||
MainWidget::MainWidget(QWidget* parent) {
|
||||
m_sharedMemory.setKey("PreVerify.exe");
|
||||
if (m_sharedMemory.attach()) {
|
||||
QMessageBox::warning(this, "警告", "PreVerify.exe正在运行,请勿重复启动!", QMessageBox::Ok);
|
||||
exit(-1);
|
||||
}
|
||||
else {
|
||||
m_sharedMemory.create(1);
|
||||
}
|
||||
|
||||
|
||||
setUi();
|
||||
setConnection();
|
||||
}
|
||||
|
||||
MainWidget::~MainWidget() {
|
||||
delete this;
|
||||
}
|
||||
|
||||
void MainWidget::setUi() {
|
||||
resize(1600, 900);
|
||||
m_centralWgt.setLayout(&m_centralLt);
|
||||
@ -54,7 +61,7 @@ void MainWidget::setUi() {
|
||||
void MainWidget::setConnection() {
|
||||
QObject::connect(&m_preVerifyBtn, &QPushButton::pressed, this, &MainWidget::slot_preVerifyBtnPressed);
|
||||
QObject::connect(&m_paramSettingBtn, &QPushButton::pressed, this, &MainWidget::slot_paramSettingBtnPressed);
|
||||
QObject::connect(this, &MainWidget::sig_winStateChangeEvent, &m_preVerifyWgt, &PreVerifyWidget::slot_winStateChangeEvent);
|
||||
//QObject::connect(this, &MainWidget::sig_winStateChangeEvent, &m_preVerifyWgt, &PreVerifyWidget::slot_winStateChangeEvent);
|
||||
}
|
||||
|
||||
void MainWidget::load() {
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "PreVerifyWidget.h"
|
||||
#include "qbuttongroup.h"
|
||||
#include "QEvent"
|
||||
#include "qsharedmemory.h"
|
||||
|
||||
|
||||
|
||||
@ -16,7 +17,6 @@ class MainWidget : public QMainWindow {
|
||||
|
||||
public:
|
||||
MainWidget(QWidget* parent = nullptr);
|
||||
~MainWidget();
|
||||
void setUi();
|
||||
void setConnection();
|
||||
void load();
|
||||
@ -36,6 +36,7 @@ private:
|
||||
PreVerifyWidget m_preVerifyWgt;
|
||||
QWidget m_paramSettingWgt;
|
||||
QButtonGroup m_menuGrp;
|
||||
QSharedMemory m_sharedMemory;
|
||||
|
||||
public:
|
||||
void changeEvent(QEvent* event) override;
|
||||
|
@ -166,7 +166,7 @@
|
||||
<QtMoc Include="JSONDocUtil.h" />
|
||||
<QtMoc Include="JSONUtil.h" />
|
||||
<QtMoc Include="DefectViewCustom.h" />
|
||||
<ClInclude Include="PreVerifyWidget.h" />
|
||||
<QtMoc Include="PreVerifyWidget.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtRcc Include="PreVerify.qrc" />
|
||||
|
@ -16,6 +16,9 @@
|
||||
<Filter Include="utils">
|
||||
<UniqueIdentifier>{7630d594-8c7c-4b8e-b52e-948aa2bbc118}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="customComponent">
|
||||
<UniqueIdentifier>{3f54e682-abaa-4fc8-b627-2d43d4b38d7f}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="MainWidget.cpp">
|
||||
@ -31,8 +34,12 @@
|
||||
<ClCompile Include="JSONUtil.cpp">
|
||||
<Filter>utils</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="DefectViewCustom.cpp" />
|
||||
<ClCompile Include="ScrollAreaCustom.cpp" />
|
||||
<ClCompile Include="DefectViewCustom.cpp">
|
||||
<Filter>customComponent</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ScrollAreaCustom.cpp">
|
||||
<Filter>customComponent</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtMoc Include="MainWidget.h">
|
||||
@ -44,7 +51,10 @@
|
||||
<QtMoc Include="JSONUtil.h">
|
||||
<Filter>utils</Filter>
|
||||
</QtMoc>
|
||||
<QtMoc Include="DefectViewCustom.h" />
|
||||
<QtMoc Include="PreVerifyWidget.h" />
|
||||
<QtMoc Include="DefectViewCustom.h">
|
||||
<Filter>customComponent</Filter>
|
||||
</QtMoc>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="PreVerify.yml">
|
||||
@ -54,11 +64,12 @@
|
||||
<Filter>main</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="PreVerifyWidget.h" />
|
||||
<ClInclude Include="ScrollAreaCustom.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtRcc Include="PreVerify.qrc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ScrollAreaCustom.h">
|
||||
<Filter>customComponent</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -16,10 +16,13 @@
|
||||
#include "qpixmapcache.h"
|
||||
#include "QSpacerItem"
|
||||
#include "qmessagebox.h"
|
||||
#include "resource.h"
|
||||
#include "QtConcurrent/qtconcurrentrun.h"
|
||||
#include "QFutureWatcher"
|
||||
#include "DefectViewCustom.h"
|
||||
|
||||
|
||||
PreVerifyWidget::PreVerifyWidget(QWidget* parent) {
|
||||
QImageReader::setAllocationLimit(0);
|
||||
QPixmapCache::setCacheLimit(8 * 1024 * 1024);
|
||||
setUi();
|
||||
setConnection();
|
||||
@ -29,10 +32,6 @@ PreVerifyWidget::PreVerifyWidget(QWidget* parent) {
|
||||
loadDate();
|
||||
}
|
||||
|
||||
PreVerifyWidget::~PreVerifyWidget() {
|
||||
delete this;
|
||||
}
|
||||
|
||||
void PreVerifyWidget::setUi() {
|
||||
setLayout(&m_lt);
|
||||
m_lt.addLayout(&m_leftLt, 3);
|
||||
@ -149,7 +148,10 @@ void PreVerifyWidget::setUi() {
|
||||
m_treeWgt.setIndentation(5);
|
||||
m_treeWgt.setColumnCount(treeHeaders.size());
|
||||
m_treeWgt.setHeaderLabels(treeHeaders);
|
||||
m_treeWgt.header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||
m_treeWgt.setColumnWidth(0, 200);
|
||||
m_treeWgt.setColumnWidth(1, 45);
|
||||
m_treeWgt.setColumnWidth(2, 30);
|
||||
m_treeWgt.setColumnWidth(3, 45);
|
||||
m_treeWgt.setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
}
|
||||
|
||||
@ -218,12 +220,12 @@ void PreVerifyWidget::setConnection() {
|
||||
QObject::connect(&m_lastDefectBtn, &QPushButton::pressed, this, &PreVerifyWidget::slot_lastDefectBtnPressed);
|
||||
QObject::connect(&m_nextBoardBtn, &QPushButton::pressed, this, &PreVerifyWidget::slot_nextBoardBtnPressed);
|
||||
QObject::connect(&m_nextDefectBtn, &QPushButton::pressed, this, &PreVerifyWidget::slot_nextDefectBtnPressed);
|
||||
QObject::connect(this, &PreVerifyWidget::sig_grdLtUpdate, this, &PreVerifyWidget::slot_grdLtUpdate);
|
||||
}
|
||||
|
||||
void PreVerifyWidget::loadDate() {
|
||||
m_dateCmb.addItem("");
|
||||
QString path = "D:/PCBDataset/Defect/fengming/AOI_DEFECT";
|
||||
QJsonObject yearJson;
|
||||
|
||||
QDir rootDir(path);
|
||||
QStringList dateList = rootDir.entryList(QDir::NoDotAndDotDot | QDir::AllDirs, QDir::Time);
|
||||
@ -281,6 +283,7 @@ void PreVerifyWidget::loadTreeWgt() {
|
||||
//创建文件夹Json对象
|
||||
toJson(yearJson, path);
|
||||
|
||||
|
||||
//创建文件夹树
|
||||
for (QString yearKey : yearJson.keys()) {
|
||||
QTreeWidgetItem* yearItem = new QTreeWidgetItem(&m_treeWgt);
|
||||
@ -417,7 +420,35 @@ void PreVerifyWidget::slot_treeWgtCurrentItemChanged(QTreeWidgetItem* current, Q
|
||||
}
|
||||
|
||||
QJsonArray arr = m_vrsJson.value("Defectx").toArray();
|
||||
|
||||
QString samplePath = "D:/PCBDataset/Reference/" + jobLayer + "/Learn/panel_image.png";
|
||||
if (!QPixmapCache::find(jobLayer, &m_samplePxmp)) {
|
||||
m_samplePxmp.load(samplePath, nullptr, Qt::NoFormatConversion);
|
||||
QPixmapCache::insert(jobLayer, m_samplePxmp);
|
||||
}
|
||||
|
||||
QList<DefectViewCustom*> defectItems;
|
||||
collect(count, arr, jobLayer, defectItems);
|
||||
int sum = 0;
|
||||
for (DefectViewCustom* item : defectItems) {
|
||||
m_grdLt.addWidget(item, sum / m_colCount, sum % m_colCount);
|
||||
sum++;
|
||||
}
|
||||
|
||||
m_grdScr.verticalScrollBar()->setSingleStep(m_grdScr.height());
|
||||
m_grdScr.verticalScrollBar()->setSliderPosition(0);
|
||||
this->setFocus();
|
||||
}
|
||||
|
||||
void PreVerifyWidget::collect(int count, QJsonArray& arr,QString& jobLayer, QList<DefectViewCustom*>& defectItems) {
|
||||
QPixmap px;
|
||||
QPixmapCache::find(jobLayer, &px);
|
||||
for (int i = 0; i < count; i++) {
|
||||
int defectId = i + 1;
|
||||
QString scanImgPath = m_dirPath + m_ab + QString::number(defectId) + ".jpg";
|
||||
if (!QFile(scanImgPath).exists()) {
|
||||
continue;
|
||||
}
|
||||
DefectViewCustom* defectItem = new DefectViewCustom();
|
||||
defectItem->m_preVerifyWgt = this;
|
||||
defectItem->setParent(this);
|
||||
@ -426,37 +457,30 @@ void PreVerifyWidget::slot_treeWgtCurrentItemChanged(QTreeWidgetItem* current, Q
|
||||
if (obj.contains("AIresult") && obj.value("AIresult") == 0) {
|
||||
isValid = false;
|
||||
}
|
||||
int defectId = i + 1;
|
||||
int defectType = obj.value("Code").toDouble();
|
||||
int defectType = obj.value("Code").toInt();
|
||||
double x = obj.value("X").toDouble();
|
||||
double y = obj.value("Y").toDouble();
|
||||
|
||||
QString samplePath = "D:/PCBDataset/Reference/" + jobLayer + "\\Learn\\panel_image.png";
|
||||
if (!QPixmapCache::find(jobLayer, &m_samplePxmp)) {
|
||||
m_samplePxmp.load(samplePath, nullptr, Qt::NoFormatConversion);
|
||||
QPixmapCache::insert(jobLayer, m_samplePxmp);
|
||||
}
|
||||
bool containSample = m_showCamChk.isChecked();
|
||||
defectItem->load(m_dirPath + m_ab + QString::number(defectId) + ".jpg", defectId, isValid, x, y, jobLayer, m_samplePxmp, defectType, m_rowHeight, containSample);
|
||||
if (m_colCount == 2) {
|
||||
defectItem->load(scanImgPath, defectId, isValid, x, y, jobLayer, px, defectType, m_rowHeight, containSample);
|
||||
switch (m_colCount) {
|
||||
case 2:
|
||||
defectItem->scale(1.8, 1.8);
|
||||
}
|
||||
else if (m_colCount == 3) {
|
||||
break;
|
||||
case 3:
|
||||
defectItem->scale(1.6, 1.6);
|
||||
}
|
||||
else if (m_colCount == 4) {
|
||||
break;
|
||||
case 4:
|
||||
defectItem->scale(0.9, 0.9);
|
||||
}
|
||||
else if (m_colCount == 5) {
|
||||
break;
|
||||
case 5:
|
||||
defectItem->scale(0.9, 0.9);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
m_grdLt.addWidget(defectItem, i / m_colCount, i % m_colCount);
|
||||
|
||||
m_grdScr.verticalScrollBar()->setSingleStep(m_grdScr.height());
|
||||
defectItems.push_back(defectItem);
|
||||
}
|
||||
|
||||
m_grdScr.verticalScrollBar()->setSliderPosition(0);
|
||||
this->setFocus();
|
||||
}
|
||||
|
||||
//1.添加 -1.删除
|
||||
@ -740,3 +764,7 @@ void PreVerifyWidget::keyPressEvent(QKeyEvent* event) {
|
||||
void PreVerifyWidget::slot_winStateChangeEvent() {
|
||||
slot_treeWgtCurrentItemChanged(m_treeWgt.currentItem(), nullptr);
|
||||
}
|
||||
|
||||
void PreVerifyWidget::slot_grdLtUpdate() {
|
||||
update();
|
||||
}
|
@ -16,16 +16,19 @@
|
||||
#include "qspinbox.h"
|
||||
#include "ScrollAreaCustom.h"
|
||||
#include "qmutex.h"
|
||||
#include "logger.h"
|
||||
|
||||
|
||||
class DefectViewCustom;
|
||||
class PreVerifyWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
LOG4QT_DECLARE_QCLASS_LOGGER
|
||||
|
||||
public:
|
||||
PreVerifyWidget(QWidget* parent = nullptr);
|
||||
~PreVerifyWidget();
|
||||
void setUi();
|
||||
void setConnection();
|
||||
void load();
|
||||
void collect(int count, QJsonArray& arr, QString& jobLayer, QList<DefectViewCustom*>& defectItems);
|
||||
void updateOne(QString defectId, int action);
|
||||
QString defectId2Desc(int defectId);
|
||||
void filter();
|
||||
@ -94,7 +97,8 @@ private:
|
||||
int m_rowHeight = -1;
|
||||
QList<QTreeWidgetItem*> m_boardItemList;
|
||||
|
||||
|
||||
signals:
|
||||
void sig_grdLtUpdate();
|
||||
|
||||
public slots:
|
||||
void slot_treeWgtCurrentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);
|
||||
@ -103,6 +107,7 @@ public slots:
|
||||
void slot_nextBoardBtnPressed();
|
||||
void slot_nextDefectBtnPressed();
|
||||
void slot_winStateChangeEvent();
|
||||
void slot_grdLtUpdate();
|
||||
|
||||
};
|
||||
|
||||
|
@ -7,9 +7,9 @@
|
||||
#include "QGuiApplication"
|
||||
#include <windows.h>
|
||||
#include <dbghelp.h>
|
||||
#include "XDongleVerifierWorker.h"
|
||||
#include "QDir"
|
||||
#include "QDateTime"
|
||||
#include "qthreadpool.h"
|
||||
|
||||
|
||||
#pragma comment(lib, "Dbghelp.lib")
|
||||
@ -20,6 +20,8 @@ int main(int argc, char* argv[]) {
|
||||
QApplication a(argc, argv);
|
||||
SetUnhandledExceptionFilter(exceptionCallback);
|
||||
|
||||
QThreadPool::globalInstance()->setMaxThreadCount(15);
|
||||
|
||||
|
||||
MainWidget* mainWidget = new MainWidget();
|
||||
mainWidget->load();
|
||||
|
Loading…
Reference in New Issue
Block a user