Skip to content

fix: replece resize to setFixedSize#512

Merged
deepin-bot[bot] merged 1 commit intolinuxdeepin:masterfrom
ut003640:master
Mar 4, 2026
Merged

fix: replece resize to setFixedSize#512
deepin-bot[bot] merged 1 commit intolinuxdeepin:masterfrom
ut003640:master

Conversation

@ut003640
Copy link
Contributor

@ut003640 ut003640 commented Mar 4, 2026

to fixed size,please used setFixedSize

PMS: BUG-351725

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @ut003640, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

to fixed size,please used setFixedSize

PMS: BUG-351725
@deepin-ci-robot
Copy link

deepin pr auto review

针对这段 git diff 中的代码变更,我从语法逻辑、代码质量、代码性能和代码安全四个维度进行审查,以下是详细的分析和改进建议:

1. 语法逻辑

  • 变更分析
    • 原代码使用 resize(),新代码使用 setFixedSize()
    • resize() 允许窗口在后续布局或用户交互中改变大小(只要布局管理器认为需要)。
    • setFixedSize() 会强制设置窗口的最小和最大尺寸为同一值,从而锁定窗口大小,使其无法通过布局或用户交互改变尺寸。
  • 潜在问题
    • 如果 DockContentWidget 位于动态变化的布局中(例如父窗口大小改变),使用 setFixedSize() 可能会导致布局计算错误或界面显示异常。它会忽略 Qt 的布局系统的自动调整能力,导致该部件"僵死"在当前计算出的尺寸。
    • 如果意图是让窗口大小随 m_netView 的内容动态变化,但又要限制最小高度,那么 setFixedSize 可能过于绝对。
  • 建议
    • 如果该部件是顶层窗口或确实需要固定大小(例如弹窗),则修改是合理的。
    • 如果该部件是嵌入在某个布局中的子控件,建议回退resize(),或者使用 setMinimumSize()setMaximumSize() 来控制范围,而不是强制固定大小。

2. 代码质量

  • 可读性
    • 计算高度的逻辑非常复杂,全部写在一行内,可读性较差。qMax 的第二个参数包含多个加法运算和三元运算符,难以快速理解。
  • 魔法数字
    • 代码中出现了 2010 这样的"魔法数字"(Magic Numbers)。虽然可能是间距,但缺乏语义化的常量定义,维护时难以理解其具体含义(是 padding、margin 还是 spacing)。
  • 建议
    • 提取变量:将复杂的计算逻辑拆解,提取为局部变量,提高可读性。
    • 定义常量:将 2010 定义为具有语义的常量,例如 static constexpr int kTopPadding = 20;

3. 代码性能

  • 函数调用开销
    • isVisibleTo()height()width() 等函数调用在 Qt 中通常是内联的或开销极小,性能影响可忽略。
  • 布局计算
    • setFixedSize() 会触发 resizeEvent,如果频繁调用此槽函数,可能会导致频繁的重绘。不过,鉴于这是网络插件的 UI 更新,通常不会达到每秒数十次的频率,因此性能方面不是主要瓶颈。
  • 建议
    • 无需特别的性能优化,目前的性能开销在 UI 交互中是可以接受的。

4. 代码安全

  • 空指针检查
    • 代码中直接访问了 m_netViewm_mainLayoutm_netCheckBtnm_netSetBtn 的成员函数(如 height(), isVisibleTo())。
    • 如果这些指针未初始化或已被置空(例如在析构过程中被异步调用),将导致程序崩溃。
  • 建议
    • 虽然在 Qt 的槽函数中通常假设对象有效,但为了健壮性,建议在关键路径或不确定调用时机时,添加断言或空指针检查(尽管这会增加少量代码,但能提高安全性)。

改进后的代码示例

综合考虑可读性和逻辑安全性,建议重构如下:

// 在类定义中或头文件顶部定义常量
static constexpr int kExtraTopPadding = 20;   // 对应原代码的 20
static constexpr int kButtonSpacing = 10;    // 对应原代码的 10

public Q_SLOTS:
    void updateHeight(int h) {
        // 安全检查:确保关键指针有效
        if (!m_netView || !m_mainLayout || !m_netSetBtn || !m_netCheckBtn) {
            return;
        }

        m_netView->setMaxHeight(h);
        if (m_netView->height() > h) {
            m_netView->setFixedHeight(h);
        }

        // 计算基础高度:视图高度 + 顶部额外间距 + 布局边距
        int baseHeight = m_netView->height() + kExtraTopPadding + m_mainLayout->contentsMargins().top();

        // 计算按钮区域的高度
        int buttonsHeight = 0;
        if (m_netCheckBtn->isVisibleTo(this)) {
            buttonsHeight = m_netSetBtn->height() + m_netCheckBtn->height() + kButtonSpacing;
        } else {
            buttonsHeight = m_netSetBtn->height();
        }

        // 计算最终目标高度
        int finalHeight = qMax(m_minHeight, baseHeight + buttonsHeight);

        // 根据实际需求选择设置大小的方式
        // 方案 A: 允许布局调整(推荐用于子控件)
        resize(m_netView->width(), finalHeight);

        // 方案 B: 强制固定大小(仅用于需要完全锁定的弹窗等)
        // setFixedSize(m_netView->width(), finalHeight);
    }

总结

  1. 主要风险:将 resize 改为 setFixedSize 是一个逻辑上的重大变更,请确认该 Widget 是否真的需要"不可变"。如果是嵌入式控件,建议改回 resize
  2. 优化建议:提取魔法数字并拆分复杂的一行式计算,以提升代码可维护性。
  3. 版权年份:顺便注意到 SPDX-FileCopyrightText 从 2024 变更为 2026。除非这是为了未来的规划,否则通常版权年份应更新为当前年份(如 2024 或 2025),请确认是否为笔误。

@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: caixr23, ut003640

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ut003640
Copy link
Contributor Author

ut003640 commented Mar 4, 2026

/merge

@deepin-bot
Copy link
Contributor

deepin-bot bot commented Mar 4, 2026

This pr cannot be merged! (status: unstable)

@ut003640
Copy link
Contributor Author

ut003640 commented Mar 4, 2026

/forcemerge

@deepin-bot
Copy link
Contributor

deepin-bot bot commented Mar 4, 2026

This pr force merged! (status: unstable)

@deepin-bot deepin-bot bot merged commit 4eedd00 into linuxdeepin:master Mar 4, 2026
14 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants