在Qt C++中,当鼠标悬停边框时,如何完全禁用调整窗口大小,包括调整大小图标?

Kla*_*sik 39 c++ user-interface qt border

我使用: setFixedSize(size()); 停止窗口调整大小,但当鼠标位于窗口边框上时,仍会显示调整大小箭头.

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

dso*_*k92 40

Qt有一个windowFlag要求Qt::MSWindowsFixedSizeDialogHint它.根据你到底想要什么,你想这个标志相结合Qt::Widget,Qt::WindowQt::Dialog.

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

  ...
}
Run Code Online (Sandbox Code Playgroud)


thu*_*uga 18

尝试这样的事情:

this->statusBar()->setSizeGripEnabled(false);
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您需要做的就是检测哪个小部件正在激活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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 使用Windows 10,我不得不使用这个答案和下一个(windowFlag`Qt :: MSWindowsFixedSizeDialogHint`) (2认同)

Tra*_*oud 15

如果您确切知道窗口的大小应该是单行:

this->setFixedSize(QSize(750, 400));
Run Code Online (Sandbox Code Playgroud)

  • 奇迹般有效! (2认同)

Buv*_*inJ 8

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


小智 8

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

this->layout()->setSizeConstraint(QLayout::SetFixedSize);
Run Code Online (Sandbox Code Playgroud)

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

(我正在使用Qt 4.8.)

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

  • 如果您以编程方式添加小部件并且不知道构造后的大小,则这是最佳解决方案。 (2认同)

Tus*_*har 5

setMinimumSize (QSize(width_px,height_px))

setMaximumSize (QSize(width_px,height_px))

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


小智 5

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

this->setFixedSize(this->width(), this->height());
Run Code Online (Sandbox Code Playgroud)

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

this->setFixedWidth(this->width());
this->setFixedHeight(this->height());
Run Code Online (Sandbox Code Playgroud)