-
Notifications
You must be signed in to change notification settings - Fork 4
Scantailor Win-64-Qt6 crashes when recreating new project #51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Dumps from 1.2024.10.28. This is the version where I moved from Qt 6.7.3 to 6.8.1 |
Короче, я перезалил x64 Qt6 сборку с версией 6.7.3. Под ARM у меня и так 6.7.3 был, так как начиная с 6.8 у меня Qt перестал собираться под ARM (Visual Studio выжирала оперативку или вылетала с неизвестной ошибкой) |
@zvezdochiot посмотри файлики перевода. Дампит при вызове |
@plzombie . Да в файлах переводов давно все номера строк "поехавшие". В виджетах долгое время производилась перетрубация. Роман как то умеет их в соответствие приводить, а я ни шиша. Сверять все строки вручную? - да это проще застрелиться! Такие вот дела. |
Я могу поконкретней сказать. Дампит всегда в одном из OptionsWidget, внутри setupUi, внутри retranslateUi. Ещё конкретней, в
и на одном из new падает уже по схеме выше |
@plzombie , а ежели в каждый этап в конструктор происать: #include <QDebug>
...
qDebug() << "имя этапа" на нужный выйти не получится? Они вроде как по порядку создаются. |
@zvezdochiot Они рандомно падают. Мне кажется, это что-то, связанное с деревом виджетов в Qt. А возможно и тупо баг в 6.8.1, надо найти какой-нибудь дистрибутив линукса, где он есть по умолчанию, и посмотреть Вот эти вот правками сейчас тестирую, если что: diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index ecf8764..20ed5fc 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -352,6 +352,7 @@ MainWindow::switchToNewProject(
updateDisambiguationRecords(pages->toPageSequence(IMAGE_VIEW));
// Recreate the stages and load their state.
+ m_ptrStages.reset(nullptr);
m_ptrStages.reset(new StageSequence(pages, newPageSelectionAccessor()));
if (project_reader)
{
diff --git a/src/StageSequence.cpp b/src/StageSequence.cpp
index e641ae3..6d6757a 100644
--- a/src/StageSequence.cpp
+++ b/src/StageSequence.cpp
@@ -22,13 +22,20 @@
StageSequence::StageSequence(IntrusivePtr<ProjectPages> const& pages,
PageSelectionAccessor const& page_selection_accessor)
- : m_ptrFixOrientationFilter(new fix_orientation::Filter(page_selection_accessor)),
+ /* : m_ptrFixOrientationFilter(new fix_orientation::Filter(page_selection_accessor)),
m_ptrPageSplitFilter(new page_split::Filter(pages, page_selection_accessor)),
m_ptrDeskewFilter(new deskew::Filter(page_selection_accessor)),
m_ptrSelectContentFilter(new select_content::Filter(page_selection_accessor)),
m_ptrPageLayoutFilter(new page_layout::Filter(pages, page_selection_accessor)),
- m_ptrOutputFilter(new output::Filter(page_selection_accessor))
+ m_ptrOutputFilter(new output::Filter(page_selection_accessor))*/
{
+ m_ptrFixOrientationFilter.reset(new fix_orientation::Filter(page_selection_accessor));
+ m_ptrPageSplitFilter.reset(new page_split::Filter(pages, page_selection_accessor));
+ m_ptrDeskewFilter.reset(new deskew::Filter(page_selection_accessor));
+ m_ptrSelectContentFilter.reset(new select_content::Filter(page_selection_accessor));
+ m_ptrPageLayoutFilter.reset(new page_layout::Filter(pages, page_selection_accessor));
+ m_ptrOutputFilter.reset(new output::Filter(page_selection_accessor));
+
m_fixOrientationFilterIdx = m_filters.size();
m_filters.push_back(m_ptrFixOrientationFilter); На Qt 6.7.3 и Qt 5.12.12, понятное дело, ничего не падает. |
В общем, я не понимаю, как это всё работает. Где и когда этот StageSequence привязывается к окну и где отвязывается. Завтра соберу debug версию Qt 6.8.1, попробую посмотреть, где конкретно падает |
@plzombie say:
У меня случаются падения "на ровном месте". Я даже issue на это заводил. Но они совсем рандомные и логика никак не отслеживается. Думал даже, что у меня либо диск сбоит, либо память. Да и сейчас так думаю, слишком рандомно они происходят. PS: На этапе "Вывод" (Output) я вывел |
lupdate этим занимается. Под виндами у меня скрипт для запуска: @rem Find lupdate
if exist C:\Prog\Qt\5.12.12\bin\lupdate.exe set LUPDATE=C:\Prog\Qt\5.12.12\bin\lupdate.exe
if exist D:\Prog\Qt\5.12.12\bin\lupdate.exe set LUPDATE=D:\Prog\Qt\5.12.12\bin\lupdate.exe
@rem Save start directory
@set START_DIR=%CD%
@rem Find source directory
@rem Start from VSCode inside source dir
@if exist .\src\version.h @set SOURCE_DIR=%CD%\src
@rem Start from TC/Explorer outside source dir
@if exist .\src\src\version.h @set SOURCE_DIR=%CD%\src\src
@rem Set translations dir
@set TRANSLATION_DIR=%SOURCE_DIR%\translations
@rem go to translation folder
@cd %TRANSLATION_DIR%
@rem Update translation
@for %%f in (scantailor-experimental*.ts) do (
%LUPDATE% %SOURCE_DIR% -ts %%f
)
@rem Restore start directory
@cd %START_DIR% Запуск выглядит так: CD d:\Prog\ScanTailor\Experimental\src\src\translations\
D:\Prog\Qt\5.12.12\bin\lupdate.exe d:\Prog\ScanTailor\Experimental\src\src -ts scantailor-experimental_bg.ts
D:\Prog\Qt\5.12.12\bin\lupdate.exe d:\Prog\ScanTailor\Experimental\src\src -ts scantailor-experimental_cs.ts
D:\Prog\Qt\5.12.12\bin\lupdate.exe d:\Prog\ScanTailor\Experimental\src\src -ts scantailor-experimental_de.ts
... |
@plzombie say:
Есть даже самодельный указатель SafeDeletingQObjectPtr. И коммент в исходниках MainWindow:
@plzombie say:
Я аж MVST затеял, чтобы разобраться. В нем, наверное, треть или четверть базовой логики ST. И я тоже до конца не понимаю, что в ST происходит. А это нужно, чтобы стадию редактирования вставить. Вот трассировка одиночного щелчка мышью при смене стадии в STD (pdf и исходник для draw.io): Трассировка неполная. Там в начале пропущена цепочка CaсheDrivenTask, которая рисует незавершенные эскизы, прежде чем основную обработку запускать. И две цепочки, которые запускают ContentBoxPropagator и PageOrientationPropagator, чтобы принудительно обновить сведения о поворотах и нарезках, чтобы незавершенные эскизы правильно показали повороты и нарезку. В отладчике будет постоянная скачка между тремя потоками: основной GUI-поток, основная фоновая обработка, фоновая работа кеша эскизов. Фоновые обведены красным на трассировке. Это работают стадии:
Фоновые потоки сигналят в GUI о завершении через postEvent. @plzombie say:
Это модель для окна со списком фильтров (массив фильтров и доступ к ним по индексу). MainWindow - контролер. Вся возня внутри MainWindow - это синхронизация между тем, что видно в окне, и списком фильтров, которые сидят в StageSequence. |
@plzombie say:
@zvezdochiot say:
У этого указателя тоже есть универсальный конструктор от произвольного типа:
Как бы это не повторение истории с CachingFactory, когда этот конструктор вместо конструктора копии срабатывал. Там тоже const/не-const переключал выбор версии конструктора. |
@plzombie say:
Ежели это подтвердится, я удалю все мерики и уберу сртировку из |
Ну а вот тут баги всякие https://bugreports.qt.io/browse/QTBUG-95134 https://bugreports.qt.io/browse/QTBUG-83387 со ссылкой на https://bugreports.qt.io/browse/QTBUG-108637
и вот
Ну и прямо внутри Мои предложения - протестировать на линуксе с версией >=6.8 (есть в готовящемся выпуске Fedora 42, например). Если не воспроизводится - то смотреть дальше в сторону disconnect(), собирать статистику, можно ли воспроизвести ошибку в <=6.7.3 |
Вот прямо конкретно объяснение ошибки:
|
@plzombie , хмм... я отключал сигналы только на выбор доп. фильтров, чтобы избежать запуска обновления изображения (фильтры то с текущими параметрами уже применены и обновления изображения не требуется). Только надо вспомнить, как я их отключал... Как то так: scantailor-experimental/src/stages/output/OptionsWidget.cpp Lines 501 to 502 in 3127ec5
scantailor-experimental/src/stages/output/OptionsWidget.cpp Lines 570 to 571 in 3127ec5
PS: Но были отключения и в |
Короче вот https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/tree/fix_issue_51 |
Ссылка на билд https://disk.yandex.ru/d/asJpyv4mwb4Taw |
…x_issue_51 fix #51: disconnect all
CRASH:
scantailor-experimental-1.2025.01.06-Win32-X86-64-Qt6
OK:
scantailor-experimental-1.2025.01.06-Win32-X86-64
scantailor-experimental-1.2025.01.06-Win32-X86-32
The text was updated successfully, but these errors were encountered: