53

我使用: setFixedSize(size()); 阻止窗口调整大小,但是当鼠标移到窗口的边框上时,调整大小的箭头仍然出现。

有没有更好的方法来禁用窗口调整大小以避免在越界时显示箭头?

4

15 回答 15

54

Qt 有一个 windowFlag 调用Qt::MSWindowsFixedSizeDialogHint它。根据您真正想要的,您希望将此标志与Qt::Widget,Qt::Window或结合起来Qt::Dialog

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

  ...
}
于 2015-02-08T21:37:37.737 回答
22

如果您确切知道所需的窗口大小,则为单线:

this->setFixedSize(QSize(750, 400));
于 2016-12-12T19:10:33.073 回答
19

尝试这样的事情:

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

你也可以赶上它的表演活动,这取决于你。

于 2013-05-22T07:13:03.887 回答
12

如果使用 Qt Designer,请将窗口的“sizePolicy”属性在垂直和水平方向上设置为“Fixed”,并将最小和最大尺寸设置为相等的值。然后,右键单击窗口并选择“删除状态栏”以摆脱右下角的“尺寸夹点”。或者,通过 francis 的建议(而不是整个状态栏)仅删除尺寸夹点。

于 2015-03-31T21:42:32.860 回答
11

我发现在布局上调用 setSizeConstraint(QLayout::SetFixedSize) 对我来说效果最好。具体来说,从 QMainWindow 构造函数中,我调用了:

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

这是文档的链接:http: //doc.qt.io/qt-4.8/qlayout.html#SizeConstraint-enum

(我使用的是 Qt 4.8。)

由于这也是解决 OP 问题的一种简单方法,我想我会分享给其他人考虑。在 Qt 中似乎有很多方法可以实现这一点,但并非所有方法都适合每种情况。我尝试了此处发布的其他几个选项,但它们有各种问题或限制,我对自己的情况并不满意。

于 2017-10-18T03:11:35.647 回答
5

如果您希望在不手动指定的情况下从 UI 表单本身获取宽度和高度的值,那么您可以在项目类中添加以下命令:

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

您还可以使用以下方法为宽度和高度(如果需要)设置单独的参数:

this->setFixedWidth(this->width());
this->setFixedHeight(this->height());
于 2017-03-05T03:49:25.247 回答
5

利用

setMinimumSize (QSize(width_px,height_px))

setMaximumSize (QSize(width_px,height_px))

两种方法的大小相同。您不会看到调整大小的光标,因此窗口不会调整大小/最大化。

于 2016-08-17T05:42:10.867 回答
3

如果你使用Qt Creator,你可以尝试在of , Widthand中指定相同Height的窗口和。propertiesgeometryminimumSizemaximumSize

于 2013-05-26T12:30:32.730 回答
3

这对我使用 Qt Creator 3.1.1 有所帮助:

this->setFixedSize(this->maximumSize());
于 2014-08-06T04:52:38.727 回答
3

您也可以执行以下操作:

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

箭也不见了。

于 2016-08-05T08:31:21.310 回答
3

您可以在 Qt5 中使用以下代码

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

其中 sz 是 QSize 对象。

于 2016-08-04T13:36:34.343 回答
1

如果有人在寻找相同但在 Python 中:

    MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)
于 2019-05-14T01:21:20.120 回答
0

尺寸在外观之前是未知的,并且也可能因系统设置而异(100%、125%、150%),因此您可以尝试这样的操作(它也隐藏了调整大小光标):

void QWidget::showEvent(QShowEvent *event)
{
    // disable vertical resize
    int height = this->height();
    if (height != minimumHeight() || height != maximumHeight()) {
        setMinimumHeight(height);
        setMaximumHeight(height);
    }
}
于 2018-11-22T21:03:31.517 回答
0

在 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
于 2018-10-16T12:40:29.323 回答
0

要防止调整窗口大小,请添加以下行:

setFixedSize(width(), height());

在 QMainWindow 构造函数之后的行:ui->setupUi(this);.

于 2018-08-10T05:15:00.303 回答