Skip to content

Commit ec0e656

Browse files
committed
feat: 优化OCR的异步效果
1 parent f62eb32 commit ec0e656

File tree

3 files changed

+46
-63
lines changed

3 files changed

+46
-63
lines changed

Makefile

Lines changed: 13 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -852,14 +852,6 @@ moc_aimanager.cpp: aimanager.h \
852852
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkaccessmanager.h \
853853
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/QNetworkReply \
854854
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkreply.h \
855-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonObject \
856-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonobject.h \
857-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
858-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
859-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonArray \
860-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonarray.h \
861-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QBuffer \
862-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qbuffer.h \
863855
moc_predefs.h \
864856
/opt/homebrew/Cellar/qt@5/5.15.18/bin/moc
865857
/opt/homebrew/Cellar/qt@5/5.15.18/bin/moc $(DEFINES) --include /Users/ceilf/Desktop/ScreenSniper/moc_predefs.h -I/opt/homebrew/Cellar/qt@5/5.15.18/mkspecs/macx-clang -I/Users/ceilf/Desktop/ScreenSniper -I/opt/homebrew/include -I/opt/homebrew/opt/opencv/include/opencv4 -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtGui.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 -I/Library/Developer/CommandLineTools/usr/lib/clang/17/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -F/opt/homebrew/Cellar/qt@5/5.15.18/lib aimanager.h -o moc_aimanager.cpp
@@ -917,12 +909,6 @@ moc_mainwindow.cpp: mainwindow.h \
917909
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkaccessmanager.h \
918910
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/QNetworkReply \
919911
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkreply.h \
920-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
921-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
922-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonArray \
923-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonarray.h \
924-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QBuffer \
925-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qbuffer.h \
926912
moc_predefs.h \
927913
/opt/homebrew/Cellar/qt@5/5.15.18/bin/moc
928914
/opt/homebrew/Cellar/qt@5/5.15.18/bin/moc $(DEFINES) --include /Users/ceilf/Desktop/ScreenSniper/moc_predefs.h -I/opt/homebrew/Cellar/qt@5/5.15.18/mkspecs/macx-clang -I/Users/ceilf/Desktop/ScreenSniper -I/opt/homebrew/include -I/opt/homebrew/opt/opencv/include/opencv4 -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtGui.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 -I/Library/Developer/CommandLineTools/usr/lib/clang/17/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -F/opt/homebrew/Cellar/qt@5/5.15.18/lib mainwindow.h -o moc_mainwindow.cpp
@@ -982,12 +968,6 @@ moc_screenshotwidget.cpp: screenshotwidget.h \
982968
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkaccessmanager.h \
983969
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/QNetworkReply \
984970
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkreply.h \
985-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
986-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
987-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonArray \
988-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonarray.h \
989-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QBuffer \
990-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qbuffer.h \
991971
moc_predefs.h \
992972
/opt/homebrew/Cellar/qt@5/5.15.18/bin/moc
993973
/opt/homebrew/Cellar/qt@5/5.15.18/bin/moc $(DEFINES) --include /Users/ceilf/Desktop/ScreenSniper/moc_predefs.h -I/opt/homebrew/Cellar/qt@5/5.15.18/mkspecs/macx-clang -I/Users/ceilf/Desktop/ScreenSniper -I/opt/homebrew/include -I/opt/homebrew/opt/opencv/include/opencv4 -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtGui.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers -I/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 -I/Library/Developer/CommandLineTools/usr/lib/clang/17/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -F/opt/homebrew/Cellar/qt@5/5.15.18/lib screenshotwidget.h -o moc_screenshotwidget.cpp
@@ -1074,14 +1054,6 @@ aimanager.o: aimanager.cpp aimanager.h \
10741054
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkaccessmanager.h \
10751055
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/QNetworkReply \
10761056
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkreply.h \
1077-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonObject \
1078-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonobject.h \
1079-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
1080-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
1081-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonArray \
1082-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonarray.h \
1083-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QBuffer \
1084-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qbuffer.h \
10851057
aiconfigmanager.h \
10861058
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QString \
10871059
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qstring.h \
@@ -1096,7 +1068,17 @@ aimanager.o: aimanager.cpp aimanager.h \
10961068
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QStringList \
10971069
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qstringlist.h \
10981070
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QTextStream \
1099-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qtextstream.h
1071+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qtextstream.h \
1072+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonArray \
1073+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonarray.h \
1074+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
1075+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
1076+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonObject \
1077+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonobject.h \
1078+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QBuffer \
1079+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qbuffer.h \
1080+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QDebug \
1081+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qdebug.h
11001082
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o aimanager.o aimanager.cpp
11011083

11021084
main.o: main.cpp mainwindow.h \
@@ -1152,12 +1134,6 @@ main.o: main.cpp mainwindow.h \
11521134
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkaccessmanager.h \
11531135
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/QNetworkReply \
11541136
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkreply.h \
1155-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
1156-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
1157-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonArray \
1158-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonarray.h \
1159-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QBuffer \
1160-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qbuffer.h \
11611137
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers/QApplication \
11621138
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers/qapplication.h
11631139
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
@@ -1215,12 +1191,6 @@ mainwindow.o: mainwindow.cpp mainwindow.h \
12151191
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkaccessmanager.h \
12161192
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/QNetworkReply \
12171193
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkreply.h \
1218-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
1219-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
1220-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonArray \
1221-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonarray.h \
1222-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QBuffer \
1223-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qbuffer.h \
12241194
ui_mainwindow.h \
12251195
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers/QMessageBox \
12261196
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers/qmessagebox.h \
@@ -1244,6 +1214,8 @@ mainwindow.o: mainwindow.cpp mainwindow.h \
12441214
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qsettings.h \
12451215
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QFile \
12461216
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qfile.h \
1217+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
1218+
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
12471219
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QDebug \
12481220
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qdebug.h \
12491221
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers/QDialog \
@@ -1326,12 +1298,6 @@ screenshotwidget.o: screenshotwidget.cpp screenshotwidget.h \
13261298
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkaccessmanager.h \
13271299
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/QNetworkReply \
13281300
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtNetwork.framework/Headers/qnetworkreply.h \
1329-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonDocument \
1330-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsondocument.h \
1331-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QJsonArray \
1332-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qjsonarray.h \
1333-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/QBuffer \
1334-
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtCore.framework/Headers/qbuffer.h \
13351301
ocrresultdialog.h \
13361302
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers/QDialog \
13371303
/opt/homebrew/Cellar/qt@5/5.15.18/lib/QtWidgets.framework/Headers/qdialog.h \
2.2 KB
Binary file not shown.

screenshotwidget.cpp

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3566,24 +3566,41 @@ void ScreenshotWidget::performOCR()
35663566
// 获取当前截图(包含绘制的内容)
35673567
QPixmap capture = this->grab(selectedRect);
35683568

3569-
// 调用 OCR
3570-
QString text = OcrManager::recognize(capture);
3569+
// 显示正在识别的提示
3570+
QMessageBox *loadingMsg = new QMessageBox(this);
3571+
loadingMsg->setWindowTitle(getText("ocr_recognizing_title", "正在识别"));
3572+
loadingMsg->setText(getText("ocr_recognizing_msg", "正在进行 OCR 识别,请稍候..."));
3573+
loadingMsg->setStandardButtons(QMessageBox::NoButton);
3574+
loadingMsg->setWindowFlags(loadingMsg->windowFlags() | Qt::WindowStaysOnTopHint);
3575+
loadingMsg->show();
3576+
3577+
// 异步调用 OCR
3578+
OcrManager::recognizeAsync(capture, [this, backend, loadingMsg](const QString &text) {
3579+
// 确保所有UI操作在主线程中执行
3580+
QMetaObject::invokeMethod(this, [this, text, backend, loadingMsg]() {
3581+
// 关闭正在识别的提示
3582+
if (loadingMsg) {
3583+
loadingMsg->close();
3584+
loadingMsg->deleteLater();
3585+
}
35713586

3572-
if (!text.isEmpty() && !text.startsWith("Error"))
3573-
{
3574-
QClipboard *clipboard = QGuiApplication::clipboard();
3575-
clipboard->setText(text);
3587+
if (!text.isEmpty() && !text.startsWith("Error"))
3588+
{
3589+
QClipboard *clipboard = QGuiApplication::clipboard();
3590+
clipboard->setText(text);
35763591

3577-
// 使用自定义对话框显示 OCR 结果
3578-
OcrResultDialog *dialog = new OcrResultDialog(text, backend, this);
3579-
dialog->exec();
3580-
delete dialog;
3581-
}
3582-
else
3583-
{
3584-
QString errorMsg = text.isEmpty() ? getText("ocr_no_text", "未能识别到文字。") : text;
3585-
QMessageBox::warning(this, getText("ocr_failed_title", "OCR 失败"), errorMsg);
3586-
}
3592+
// 使用自定义对话框显示 OCR 结果
3593+
OcrResultDialog *dialog = new OcrResultDialog(text, backend, this);
3594+
dialog->exec();
3595+
delete dialog;
3596+
}
3597+
else
3598+
{
3599+
QString errorMsg = text.isEmpty() ? getText("ocr_no_text", "未能识别到文字。") : text;
3600+
QMessageBox::warning(this, getText("ocr_failed_title", "OCR 失败"), errorMsg);
3601+
}
3602+
}, Qt::QueuedConnection);
3603+
});
35873604
}
35883605

35893606
// 图片生成文字描述

0 commit comments

Comments
 (0)