Yuhang Zhao
2023-12-05 d02f3b0bc32f711bf33a7fd288185963e9e96189
add isFixedSize implementation
2个文件已修改
19 ■■■■■ 已修改文件
src/core/contexts/win32windowcontext.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/widgets/widgetitemdelegate.cpp 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/core/contexts/win32windowcontext.cpp
@@ -1143,7 +1143,7 @@
                QPoint qtScenePos = fromNativeLocalPosition(
                    m_windowHandle, QPoint(nativeLocalPos.x, nativeLocalPos.y));
                bool isFixedSize = /*isWindowFixedSize()*/ false; // ### FIXME
                bool isFixedSize = m_delegate->isHostSizeFixed(m_host);
                bool isTitleBar = isInTitleBarDraggableArea(qtScenePos);
                bool dontOverrideCursor = false;                  // ### TODO
src/widgets/widgetitemdelegate.cpp
@@ -36,6 +36,23 @@
    }
    bool WidgetItemDelegate::isHostSizeFixed(QObject *host) const {
        const auto widget = static_cast<QWidget *>(host);
        // "Qt::MSWindowsFixedSizeDialogHint" is used cross-platform actually.
        if (widget->windowFlags() & Qt::MSWindowsFixedSizeDialogHint) {
            return true;
        }
        // Caused by setFixedWidth/Height/Size().
        const QSize minSize = widget->minimumSize();
        const QSize maxSize = widget->maximumSize();
        if (!minSize.isEmpty() && !maxSize.isEmpty() && (minSize == maxSize)) {
            return true;
        }
        // Usually set by the user.
        const QSizePolicy sizePolicy = widget->sizePolicy();
        if ((sizePolicy.horizontalPolicy() == QSizePolicy::Fixed)
            && (sizePolicy.verticalPolicy() == QSizePolicy::Fixed)) {
            return true;
        }
        return false;
    }