Название: Окно класса 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 МИНУТ!? QtC->Welcome->Examples->Find "QDialog" - остается один пример "Extension". Если повториться баг и если не лень, соберите портабл в зип и в студию... мы на своих пк проверим. Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" ! Отправлено: Igors от Ноябрь 27, 2020, 09:43 бинарник то один и то же и для win32 и для win64. То есть как это ???Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" ! Отправлено: juvf от Ноябрь 27, 2020, 09:49 бинарник то один и то же и для 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_x86 (32 бита) невозможно закрыть диалоговое окно инструментом "крестик" ! собрали 32хбитное приложение и запустили в вин32. крестик не работает. при чем тут 64бита? Либо в коде ТС ошибка, либо в Qt ошибка. ТС нужно собрать QDialog из примеров и проверить. Название: Re: Окно класса QDialog - невозможно закрыть инструментом "крестик" ! Отправлено: Igors от Ноябрь 27, 2020, 14:52 собрали 32хбитное приложение и запустили в вин32. крестик не работает. при чем тут 64бита? Либо в коде ТС ошибка, либо в Qt ошибка. ТС нужно собрать QDialog из примеров и проверить. Смущает этоНа win_x64 все работает красиво, без вопросов. Выходит с одним набором внешних dll бычит, с другим нет. Ясно что на любой машине это либы 32 для 32 приложения, но они разные.Да, и еще помню: на Вындоуз какие-то иконки в титле были "неубиваемые", убрать их у меня не получилось. Крестик или нет - не помню, много лет прошло. Ну и выходит что нужного флага нет, а иконка все равно торчит. |