禁用QMainWindow的QSizeGrip

时间:2018-05-01 03:21:19

标签: windows qt qt5

在设置主窗口的固定宽度后,我一直在尝试禁用调整大小手柄。我在Qt表单中读到将statusBar()->setSizeGripEnabled()设置为false会禁用调整大小的抓地力,但没有运气。我在Qt5上运行此功能。

我知道删除框架会消除这个问题,但这是一个更大的问题(创建拖动窗口的方法,添加按钮关闭等)。到目前为止,这是我在main方法中的内容:

#if defined(Q_OS_WIN)
   QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QApplication a(argc, argv);
Compressor w;
w.statusBar()->setSizeGripEnabled( false );
w.setFixedSize(QSize(360,450));
w.setGeometry(
            QStyle::alignedRect(
                Qt::LeftToRight,
                Qt::AlignCenter,
                w.size(),
                a.desktop()->availableGeometry()
                )
            );
w.show();

setGeometry在启动时将窗口设置在屏幕中央,将其固定为一个大小。我不确定问题是什么。有什么方法可以解决这个问题吗?

更新

设置w.setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);无效。试图修复Fixed,没有运气。

更新2

我甚至删除了状态栏,但仍然没有运气。

更新3

示例:

enter image description here

在Windows 10上使用版本Qt 5.10.1

1 个答案:

答案 0 :(得分:2)

Windows似乎对成为跨平台友好操作系统有点坚定。解决问题的方法是添加一个窗口标志。代码:

进入main.cpp

// Disable resize arrow.
#if defined(Q_OS_WIN)
    w.setWindowFlags(w.windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
#endif

完整代码:

#if defined(Q_OS_WIN)
   QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QApplication a(argc, argv);
Compressor w;

// Disable resize arrow.
#if defined(Q_OS_WIN)
    w.setWindowFlags(w.windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
#endif

w.setFixedSize(QSize(360,450));
w.setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
w.setGeometry(
            QStyle::alignedRect(
                Qt::LeftToRight,
                Qt::AlignCenter,
                w.size(),
                a.desktop()->availableGeometry()
                )
            );
w.show();

您还可以将其添加到MainWindow.cpp文件中:

this->setWindowFlags(this->windowFlags() | Qt::MSWindowsFixedSizeDialogHint);

有关详情,请参阅http://doc.qt.io/qt-5/qt.html#WindowType-enum