Я публикую это в основном потому, что потратил немного времени на поиск решения, а также из любопытства.
В соответствии с популярным запросом, пошаговый воспроизводимый пример:
создать проект виджета Qt из Qt designer.
Оставить все параметры по умолчанию, кроме имени проекта (я назвал мой "bob").
Установить цель сборки как MinGW X64
скомпилируйте и запустите исполняемый файл с автоматически созданным скелетом кода по умолчанию (я сделал это в режиме отладки, но релиз тоже не работает).
Убедитесь, что главное окно имеет изменяемый размер и кнопка закрытия в правом верхнем углу работает как положено.
откройте файл "mainwindow. cpp" и добавьте вызов setFixedSize
следующим образом:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setFixedSize(geometry().size()); // <--- this line added
}
MainWindow::~MainWindow()
{
delete ui;
}
- Перекомпилируйте, перезапустите и убедитесь, что окно теперь отказывается изменять размер (как и должно быть), а кнопка закрытия больше не закрывает окно, но позволяет перетаскивать его, как если бы вы щелкнули заголовок вместо бара (который h это не должно).
В соответствии с более популярным запросом обоснование того, почему я считаю приведенное выше подробное руководство, является воспроизводимым примером проблемы
Minimal :
check
Минимальный и читаемый:
check
Убедитесь, что вся информация, необходимая для воспроизведения проблема включена в сам вопрос:
check
Используйте отдельные блоки кода для каждого включаемого вами файла или фрагмента. Предоставьте описание для каждого блока:
, если вы не хотите, чтобы я выгружал туда все файлы по умолчанию для проекта виджета Qt.
Опишите проблему :
сделано, дважды.
Используйте краткое, но описательное описание вашей проблемы в качестве заголовка вашего вопроса:
check
Устраните все проблемы, не относящиеся к проблеме:
изо всех сил, но, видимо, с ограниченным успехом
Перепроверьте что ваш пример воспроизводит проблему:
проверьте, обильно.
Это может помочь выключить систему и перезапустить ее, или перенести пример на fre sh среда, подтверждающая, что она действительно дает пример проблемы:
Ну, извините, ребята, но я не хочу переформатировать мой P C просто для того, чтобы, возможно, легко решить проблему с банально решена. В основном я публикую это из любопытства, а также вежливости по отношению к коллегам-программистам, которые могут столкнуться с той же проблемой, я считаю, что я уже достаточно сделал.
Итак, теперь для описания проблемы:
По-видимому, вызов setFixedSize(geometry().size())
в конструкторе главного окна стандартного приложения Qt Widgets (как рекомендовано в этой почтенной ветке форумов Qt ) имеет странный побочный эффект - отключение кнопки закрытия системы в моей системе Windows 7.
Как будто события щелчка просто провалились через кнопку, нажатие на нее просто захватит окно и позволит перетащить его, но не закроет.
За исключением этого, все работает как положено ( окно становится неизменяемым, ручка изменения размера в правом нижнем углу неактивна, вы все равно можете закрыть окно другими стандартными средствами, такими как Alt + F4 и т. д. c).
Работает (хотя и зависит от платформы c) способ сделать главное окно фиксированного размера состоит в том, чтобы вызывать
setWindowFlags(windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
перед настройкой пользовательского интерфейса (ui->setupUi(this);
)
Тем не менее мне любопытно, что это удивительное поведение .
Есть ли очевидная причина, по которой изменение параметра поведения диспетчера компоновки может привести к путанице с системной кнопкой?
Я что-то здесь не так делаю?
Это воспроизводимая ошибка или странное последствие локальная проблема на моем P C - возможно, неправильная установка или конфигурация?
Я использую Qt Creator 4.11.0 на основе Qt 5.14. 0, с MinGW X64 в качестве цели на (французской) ОС Win7 (в тестовом режиме, по некоторым причинам, но я сомневаюсь, что ОС здесь виновата).