Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

  ...
}

Ответ 2

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

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;
}

Возможно, вы, вероятно, поймаете и свое шоу-событие, это зависит от вас.

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

Ответ 6

Используйте

setMinimumSize (QSize (width_px, height_px))

setMaximumSize (QSize (width_px, height_px))

где оба метода имеют тот же самый. Вы не увидите курсор изменения размера, и окно, таким образом, не будет изменено/увеличено.

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

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

Ответ 10

Также вы можете просто сделать что-то вроде:

this->setFixedWidth(int);
this->setFixedHeight(int);

Стрелки тоже исчезли.

Ответ 11

Если вы хотите получить значения ширины и высоты из самой формы пользовательского интерфейса без указания вручную, вы можете добавить следующую команду внутри своего класса проекта:

this->setFixedSize(this->width(), this->height());

Вы также можете установить отдельные параметры для ширины и высоты (если требуется):

this->setFixedWidth(this->width());
this->setFixedHeight(this->height());

Ответ 12

Чтобы предотвратить изменение размера окна, добавьте эту строку:

setFixedSize(width(), height());

в вашем конструкторе QMainWindow после строки: ui->setupUi(this); ,

Ответ 13

Единственное решение, которое действительно работает для меня в Windows 10, - это использование WinAPI:

#ifdef Q_OS_WIN
    #include <windows.h>

    ...

    SetWindowLong((HWND) window->winId(), GWL_STYLE, GetWindowLong((HWND) window->winId(), GWL_STYLE)&~WS_SIZEBOX);

#endif

Ответ 14

Размер неизвестен до появления и может варьироваться в зависимости от настроек системы (100%, 125%, 150%), поэтому вы можете попробовать что-то вроде этого (он также скрывает курсор изменения размера):

void QWidget::showEvent(QShowEvent *event)
{
    // disable vertical resize
    int height = this->height();
    if (height != minimumHeight() || height != maximumHeight()) {
        setMinimumHeight(height);
        setMaximumHeight(height);
    }
}

Ответ 15

Если кто-то ищет то же самое, но в Python:

    MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)

Ответ 16

Я только что нашел ответ. В Qt Designer просто установите для параметра sizeGripEnabled значение false в строке состояния вашего окна. Easy