В Qt C ++, как я могу полностью отключить изменение размера окна, включая значок изменения размера, когда мышь наведет курсор на границу?

Я использовал:
setFixedSize(size());
чтобы остановить изменение размера окна, но стрелки изменения размера все еще появляются, когда мышь находится за границей окна.

Есть ли лучший способ отключить изменение размера окна, чтобы не показывать стрелки при пересечении границы?

32

Решение

Попробуйте что-то вроде этого:

this->statusBar()->setSizeGripEnabled(false);

Если это не работает, все, что вам нужно сделать, это определить, какой виджет активируется QSizeGrip. Вы можете сделать это, установив фильтр событий в ваше приложение и попытавшись поймать QSizeGrip mouseMoveEvent. Затем отладьте его родительский виджет.

Вот пример функции eventFilter, которую вы можете использовать:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::MouseMove)
{
QSizeGrip *sg = qobject_cast<QSizeGrip*>(obj);
if(sg)
qDebug() << sg->parentWidget();
}
return false;
}

Возможно, вы могли бы поймать его шоу шоу, это зависит от вас.

18

Другие решения

Qt имеет windowFlag Qt::MSWindowsFixedSizeDialogHint для этого. В зависимости от того, что именно вы хотите, вы хотите объединить этот флаг с Qt::Widget, Qt::Window или же Qt::Dialog,

void MyDialog::MyDialog()
{
setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);

...
}
26

Однострочник, если вы точно знаете, каким должен быть размер окна:

this->setFixedSize(QSize(750, 400));
12

Если вы используете Qt Designer, установите для свойств вашего размера «sizePolicy» значение «Фиксированный» в вертикальном и горизонтальном направлениях и установите минимальные и максимальные размеры равными значениями. Затем щелкните правой кнопкой мыши в окне и выберите «Удалить строку состояния», чтобы избавиться от «размера захвата» в правом нижнем углу. Или удалите только ручку размера через предложение от Фрэнсиса (а не всю строку состояния).

7

Я обнаружил, что вызов setSizeConstraint (QLayout :: SetFixedSize) в макете работает лучше всего для меня. В частности, из конструктора QMainWindow я вызвал:

this->layout()->setSizeConstraint(QLayout::SetFixedSize);

Вот ссылка на документы: http://doc.qt.io/qt-4.8/qlayout.html#SizeConstraint-enum

(Я использую Qt 4.8.)

Поскольку это был также простой способ решения вопроса ОП, я подумал, что поделюсь им с другими. Похоже, что в Qt есть много способов сделать это, но не все могут быть идеальными для любой ситуации. Я попробовал несколько других опций, опубликованных здесь, но у них были различные проблемы или ограничения, которые меня не устраивали в моей собственной ситуации.

7

Это помогло мне с Qt Creator 3.1.1:

this->setFixedSize(this->maximumSize());
3

Если вы используете Qt Creator, вы можете пытаться указать то же самое Width а также Height окна в properties из geometry, minimumSize а также maximumSize,

3

Вы можете в Qt5 использовать следующий код

this->setMinimumSize(sz);
this->setMaximumSize(sz);

Где sz — объект QSize.

3