You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中如何将QPixmap缩放至相同尺寸?点击图标后变大问题求助

Qt统一工具栏图标显示尺寸的解决方案

核心问题分析

你当前的代码手动将图标转成固定尺寸的QPixmap再构造QIcon,但这种方式会让QIcon仅包含单一尺寸的资源,当工具栏处理图标不同状态(如点击激活)时,Qt可能会拉伸该资源导致尺寸异常;同时单独处理每个图标的方式容易出现疏漏,导致显示不一致。

有效解决方法

1. 统一设置工具栏的图标尺寸(推荐)

直接给工具栏设置全局图标尺寸,所有添加到该工具栏的QAction图标都会自动按此尺寸显示,无需单独处理每个图标:

  • 在工具栏初始化的代码(比如WToolbar的构造函数)中添加:
toolbar_->setIconSize(QSize(30, 30)); // 设定你需要的统一尺寸
  • 修改两个图标初始化函数,去掉手动转QPixmap的步骤,直接用原图标文件构造QIcon:
void WToolbar::setCandlesColor()
{
    QIcon icon("./src/icon/toolbar/chart-histogram-01.png");
    SetColor = std::make_shared<QAction>(icon, QString("Button"), toolbar_.get());
    SetColor->setToolTip("Green Bullish/ Red Bearish");
    SetColor->setIconVisibleInMenu(true);
    toolbar_->addAction(SetColor.get());

    connect(SetColor.get(), &QAction::triggered, plotter_.get(), &WPlotter::colorSwitch);
    connect(SetColor.get(), &QAction::triggered, this, &WToolbar::iconSwitch);
}

void WToolbar::setMA5()
{
    QIcon icon("./src/icon/toolbar/chart-line-up-ma5.png");
    PlotMA5 = std::make_shared<QAction>(icon, QString("Button"), toolbar_.get());
    PlotMA5->setToolTip("show/hide MA5");
    PlotMA5->setIconVisibleInMenu(true);
    toolbar_->addAction(PlotMA5.get());

    connect(PlotMA5.get(), &QAction::triggered, plotter_.get(), &WPlotter::plotMA5);
}

这种方式让Qt自动处理图标的缩放和状态适配,能保证所有图标在正常、点击、hover等状态下尺寸一致。

2. 确保切换图标时保持统一尺寸

如果你的iconSwitch函数中会切换SetColor的图标,要保证新图标也按统一尺寸处理:

void WToolbar::iconSwitch()
{
    QIcon newIcon("./src/icon/toolbar/xxx.png");
    // 或者用QPixmap缩放后构造图标,确保尺寸一致
    QPixmap pixmap = newIcon.pixmap(QSize(30, 30));
    SetColor->setIcon(QIcon(pixmap));
}

3. 给QIcon添加多尺寸资源(进阶)

如果需要适配不同DPI或场景,可以给QIcon添加多个尺寸的pixmap,让Qt自动选择合适的版本:

QIcon icon;
icon.addPixmap(QPixmap("./src/icon/toolbar/chart-histogram-01.png").scaled(QSize(30,30)), QIcon::Normal, QIcon::On);
icon.addPixmap(QPixmap("./src/icon/toolbar/chart-histogram-01.png").scaled(QSize(30,30)), QIcon::Normal, QIcon::Off);
// 同样添加其他状态的pixmap

不过这种方式较繁琐,不如直接设置工具栏iconSize高效。

内容的提问来源于stack exchange,提问作者Weimin Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:00:13