我使用:
setFixedSize(size());
阻止窗口调整大小,但是当鼠标移到窗口的边框上时,调整大小的箭头仍然出现。
有没有更好的方法来禁用窗口调整大小以避免在越界时显示箭头?
我使用:
setFixedSize(size());
阻止窗口调整大小,但是当鼠标移到窗口的边框上时,调整大小的箭头仍然出现。
有没有更好的方法来禁用窗口调整大小以避免在越界时显示箭头?
Qt 有一个 windowFlag 调用Qt::MSWindowsFixedSizeDialogHint
它。根据您真正想要的,您希望将此标志与Qt::Widget
,Qt::Window
或结合起来Qt::Dialog
。
void MyDialog::MyDialog()
{
setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
...
}
如果您确切知道所需的窗口大小,则为单线:
this->setFixedSize(QSize(750, 400));
尝试这样的事情:
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;
}
你也可以赶上它的表演活动,这取决于你。
如果使用 Qt Designer,请将窗口的“sizePolicy”属性在垂直和水平方向上设置为“Fixed”,并将最小和最大尺寸设置为相等的值。然后,右键单击窗口并选择“删除状态栏”以摆脱右下角的“尺寸夹点”。或者,通过 francis 的建议(而不是整个状态栏)仅删除尺寸夹点。
我发现在布局上调用 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 中似乎有很多方法可以实现这一点,但并非所有方法都适合每种情况。我尝试了此处发布的其他几个选项,但它们有各种问题或限制,我对自己的情况并不满意。
如果您希望在不手动指定的情况下从 UI 表单本身获取宽度和高度的值,那么您可以在项目类中添加以下命令:
this->setFixedSize(this->width(), this->height());
您还可以使用以下方法为宽度和高度(如果需要)设置单独的参数:
this->setFixedWidth(this->width());
this->setFixedHeight(this->height());
利用
setMinimumSize (QSize(width_px,height_px))
setMaximumSize (QSize(width_px,height_px))
两种方法的大小相同。您不会看到调整大小的光标,因此窗口不会调整大小/最大化。
如果你使用Qt Creator,你可以尝试在of , Width
and中指定相同Height
的窗口和。properties
geometry
minimumSize
maximumSize
这对我使用 Qt Creator 3.1.1 有所帮助:
this->setFixedSize(this->maximumSize());
您也可以执行以下操作:
this->setFixedWidth(int);
this->setFixedHeight(int);
箭也不见了。
您可以在 Qt5 中使用以下代码
this->setMinimumSize(sz);
this->setMaximumSize(sz);
其中 sz 是 QSize 对象。
如果有人在寻找相同但在 Python 中:
MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)
尺寸在外观之前是未知的,并且也可能因系统设置而异(100%、125%、150%),因此您可以尝试这样的操作(它也隐藏了调整大小光标):
void QWidget::showEvent(QShowEvent *event)
{
// disable vertical resize
int height = this->height();
if (height != minimumHeight() || height != maximumHeight()) {
setMinimumHeight(height);
setMaximumHeight(height);
}
}
在 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
要防止调整窗口大小,请添加以下行:
setFixedSize(width(), height());
在 QMainWindow 构造函数之后的行:ui->setupUi(this);
.