Size: a a a

2021 March 29

T

Tamer in Qt
Alexander Bardashevsky
Господа, может кто сталкивался.

Есть класс App, который наследуется от QApplication.

Далее участок кода в main:

   int ret;

   {
       App app( argc, argv );
       ret = app.exec();
       LOG_INFO( "----------- exec finished with: ", ret  );
       // в консоли пишется exec finished with: 0
   }
   
   //До сюда выполнение не доходит, приложение не завершает работу
   
   LOG_INFO( "----------- Остановка приложения -----------: ",ret  );
   return ret;

Деструктор ~App() вызывается. App является parent'ом для всех вложенных в него объектов, которые создаются через some_obj( new SomeObj( this ) ).
Деструкторы всех child'ов не вызываются от слова совсем, т.е. пэрентинг не работает.
если вызывать явно delete для всех child'ов, то приложение все равно не завершается и продолжает где-то висеть...

p.s. для того чтобы найти причину, в приложении оставил только один поток...

Вообще не пойму как такое может быть и куда копать
А в пуле событий что-нибудь висит?
источник

T

Tamer in Qt
А, так у тебя app.exec внутри {}
источник

AB

Alexander Bardashevs... in Qt
вот хз, как это можно чекнуть?
источник

T

Tamer in Qt
Вынеси app.exec в конец завершения (конец main.cpp)
источник

AB

Alexander Bardashevs... in Qt
ну я специально его засунул в {}, ранее было написано просто
return app.exec()
источник

T

Tamer in Qt
Скинь код мэйна своего
источник

AB

Alexander Bardashevs... in Qt
программа не завершалась. Вынес вот явно в {}. чтобы вызвался деструктор App раньше... понял что проблема где-то атм
источник

AB

Alexander Bardashevs... in Qt
посути я скинул почти весь код) До этого инит логера и вот это:
   QCoreApplication::setAttribute( Qt::AA_EnableHighDpiScaling );
источник

T

Tamer in Qt
Попробуй в аргументы .exec(QEventLoop::AllEvents) добавить
источник

AB

Alexander Bardashevs... in Qt
Вот в коде что я скинул ничего после деструктора App  не выполняется, соответственно программа где-то висит и не завершается. Но непонятно где, потому что в деструкторе ~App() посути ничего кроме лога нету)
источник

AB

Alexander Bardashevs... in Qt
а деструкторы child'ов не вызываются
источник

T

Tamer in Qt
Прикол в том, что у тебя программа завершится когда полностью всё отработает и все чайлды будут free
источник

T

Tamer in Qt
У тебя по-моему где-то косяк выше
источник

T

Tamer in Qt
по коду
источник

AB

Alexander Bardashevs... in Qt
Tamer
Попробуй в аргументы .exec(QEventLoop::AllEvents) добавить
ничего выше нет...

А в агрументы exec ничего не принимает. Мб не туда?
источник

IZ

Ilia Zviagin in Qt
Ivan Titov
Так никто не сталкивался с пересечением горячих клавиш в одном виджете?
Определяешь action , ловишь на сигнал, далее в зависимости от контекста возникновения сигнала делаешь одно либо другое действие. Вот и вся наука.

Контекст может быть чем-то типа текущего фокуса, либо что-то типа количества выбранных элементов где-то
источник

T

Tamer in Qt
Ivan Titov
Так никто не сталкивался с пересечением горячих клавиш в одном виджете?
Я это решил нативной обработкой под каждую ось отлавливанием сигналов
источник

T

Tamer in Qt
Чтобы не было такого, что при фокусе на одном элементе не работали события при нажатии на клаве на другом элементе
источник

IZ

Ilia Zviagin in Qt
Tamer
Я это решил нативной обработкой под каждую ось отлавливанием сигналов
Плохо же...
источник

T

Tamer in Qt
Ilia Zviagin
Плохо же...
На самом деле оказалось, что не совсем
источник