Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: salara от Октябрь 21, 2020, 10:27



Название: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: salara от Октябрь 21, 2020, 10:27
День добрый, уважаемые.

Может кто-то уже сталкивался с моей проблеммой и может поделиться решением.
Проблемма такова :
Есть GUI приложение, написанное на Qt-5.12.5.  Приложение 32-х битное. В процессе работы приложение формирует диалоговые окна
(используется класс QDialog, и функцией this->setWindowFlags(Qt::Window) устанавливается тип окна).
На win_x64 все работает красиво, без вопросов.
На win_x86 (32 бита) невозможно закрыть диалоговое окно инструментом "крестик" !
Приходится это делать через контекстное меню, вызывая его правой кнопкой мыши.
Что может быть не так ?  Почему такое происходит только на window 32-bit ?
Если кто-то уже знаком с такой проблеммой, пожалуйста, поделитесь решением.
Спасибо.


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: kambala от Октябрь 21, 2020, 16:57
может хитрости в обработке closeEvent? а на чистом примере воспроизводится?


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: ssoft от Октябрь 21, 2020, 17:51
По факту не хватает флагов Qt::WindowTitleHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint и т.п. Все эти флаги действуют на усмотрение оконного менеджера конкретной ОС, поэтому желаемое поведение хорошо бы ещё реализовать в соответствующих событиях eventClose и т.д.


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: salara от Октябрь 22, 2020, 20:48
Хочу снять свой вопрос, так как нашел решение.
По какой-то причине "крестик" закрыть окно не работает, если к диалоговому окну применить
функцию setFixedSize() - то есть сделать размер окна фиксированным,
причем это происходит только на винде 32 бита. Прям нечистая сила !
На винде 64 бита (win7, win10) такого не происходит, на Линуксе тоже все кошерно.
 


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: kambala от Октябрь 22, 2020, 22:09
а на чистом примере воспроизводится?


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: salara от Октябрь 25, 2020, 10:19
"Чистый" пример с применением к диалоговому окну функции setFixedSize() я не искал,  не было времени, к сожалению.
Таким образом проблемма осталась не познанной, для меня и как я теперь понимаю не только для меня,
однако "обходной маневр", описанный мной позволил её что называется "замести под ковер" и больше не появляться.


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: kambala от Октябрь 25, 2020, 11:34
а зачем его искать? пишется самостоятельно за 5 минут :) Если на нем баг не проявится, значит проблема у тебя в коде где-то.


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: salara от Октябрь 25, 2020, 15:41
а зачем его искать? пишется самостоятельно за 5 минут :) Если на нем баг не проявится, значит проблема у тебя в коде где-то.

Что ж тогда этой проблеммы нет на win64 ? бинарник то один и то же и для win32 и для win64.


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: juvf от Ноябрь 27, 2020, 06:26
пишется самостоятельно за 5 минут :)
5 МИНУТ!? У вас слишком много лишнего времени. У меня ушло секунд 10. С англ локализацией как-то так:
QtC->Welcome->Examples->Find "QDialog" - остается один пример "Extension". Если повториться баг и если не лень, соберите портабл в зип и в студию... мы на своих пк проверим.


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: Igors от Ноябрь 27, 2020, 09:43
бинарник то один и то же и для win32 и для win64.
То есть как это  ???


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: juvf от Ноябрь 27, 2020, 09:49
бинарник то один и то же и для win32 и для win64.
То есть как это  ???
скачайте любое портабл приложение под win32, например это (https://freecommander.com/downloads/FreeCommanderXE-32-public_portable.zip). Распакуйте архив на пк с вин32 и на пк свин64. У вас будет один и тот же бинарник работать на win32 и на win64. 


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: Igors от Ноябрь 27, 2020, 10:04
скачайте любое портабл приложение под win32, например это (https://freecommander.com/downloads/FreeCommanderXE-32-public_portable.zip). Распакуйте архив на пк с вин32 и на пк свин64. У вас будет один и тот же бинарник работать на win32 и на win64.  
Нет такой возможности, не стоит win32. Думаю что на 32-битной ОС в память будет загружено одна версия приложения (скомпилированная под 32), на 64-битной - соответственно другая. И эти версии вовсе не "тождественны". На некоторых ОС они могут быть "оформлены" одним приложением/иконкой запуска (но не на Вындоуз), также можно компилить "под оба сразу", но выполняемые приложения - разные


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: juvf от Ноябрь 27, 2020, 10:21
Цитировать
Думаю что на 32-битной ОС в память будет загружено одна версия приложения (скомпилированная под 32), на 64-битной - соответственно другая.
Что за бред вы несёте? Приложения, собранные для win32 работают в win64.
Цитировать
можно компилить "под оба сразу", но выполняемые приложения - разные
Как вы себе это представляете? Есть компилятор 32-х битный... который в помине не знает от 64-х битах... приложение собирается для win32. оформляется один бинарь.... потом... спустя годы изобрели 64 бита... взяли старое приложение и запустили на win64. Будет одно и тоже приложение работать и на w32 и на w64.

почитайте про WOW64.

 
Цитировать
Нет такой возможности, не стоит win32.
Нет какой возможности? Скачать приложение собранное для win32 и запустить на win64? 


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: Igors от Ноябрь 27, 2020, 11:39
Что за бред вы несёте?
"При проверке документов будьте взаимно вежливы". 

Как вы себе это представляете? Есть компилятор 32-х битный... который в помине не знает от 64-х битах... приложение собирается для win32. оформляется один бинарь.... потом... спустя годы изобрели 64 бита... взяли старое приложение и запустили на win64. Будет одно и тоже приложение работать и на w32 и на w64.
Да, забыл что на Вындоуз так еще можно :) 


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: kambala от Ноябрь 27, 2020, 13:02
Да, забыл что на Вындоуз так еще можно :) 
а с чего вы решили, что в Макос так нельзя? :) Это только в 10.15 (и выше) зарубили 32-битные приложения.


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: Igors от Ноябрь 27, 2020, 14:03
а с чего вы решили, что в Макос так нельзя? :) Это только в 10.15 (и выше) зарубили 32-битные приложения.
"Смотрите, смотрите - он не знает !!!" :) Как раз на OSX я много лет компилил 2 "бинарника" (какое мерзкое слово) в один бандл, отсюда и мой ответ выше.

А вообще "тот же бинарник" - не аргумент. По коду 32/64 несовместимы, напр нельзя вызвать 32-битную dll из 64 приложения или наоборот. Поэтому все внешние либы разные, наверно там собака и порылась





Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: juvf от Ноябрь 27, 2020, 14:10
Поэтому все внешние либы разные, наверно там собака и порылась
нет.
раз разобрались, что бинарник один и тот же, то вообще забываем про win64. Исходные данные: 

Цитировать
Есть GUI приложение, написанное на Qt-5.12.5.  Приложение 32-х битное. В процессе работы приложение формирует диалоговые окна
(используется класс QDialog, и функцией this->setWindowFlags(Qt::Window) устанавливается тип окна).
На win_x64 все работает красиво, без вопросов.
На win_x86 (32 бита) невозможно закрыть диалоговое окно инструментом "крестик" !

собрали 32хбитное приложение и запустили в вин32. крестик не работает. при чем тут 64бита? Либо в коде ТС ошибка, либо в Qt ошибка. ТС нужно собрать QDialog из примеров и проверить.


Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" !
Отправлено: Igors от Ноябрь 27, 2020, 14:52
собрали 32хбитное приложение и запустили в вин32. крестик не работает. при чем тут 64бита? Либо в коде ТС ошибка, либо в Qt ошибка. ТС нужно собрать QDialog из примеров и проверить.
Смущает это
На win_x64 все работает красиво, без вопросов.
Выходит с одним набором внешних dll бычит, с другим нет. Ясно что на любой машине это либы 32 для 32 приложения, но они разные.

Да, и еще помню: на Вындоуз какие-то иконки в титле были "неубиваемые", убрать их у меня не получилось. Крестик или нет - не помню, много лет прошло. Ну и выходит что нужного флага нет, а иконка все равно торчит.