在 QResource::registerResource() 之后更新图标



我有一个程序可以动态(QResource::registerResource()(成功更改资源文件。

问题是我的图标没有自动更改。

我已经实施了一些有效的解决方案,但没有一个对我来说似乎真的很好......

看一看:

解决方案 1

这不是一个非常糟糕的解决方案,但它对我来说是如此手工制作。这个项目有很多图标

QPixmap pix(":/images/save");
QIcon icon(pix);
ui->myBtn->setIcon(icon);

解决方案2

真的很糟糕,性能问题,也太手工了。

QObject::disconnect(ui->myBtn, SIGNAL(clicked()), this, SLOT(changeResources()));
ui->setupUi(this);
QObject::connect(ui->myBtn, SIGNAL(clicked()), this, SLOT(changeResources()));

我以为调用窗口的QWidget::update()方法可以完成这项工作,但不幸的是,没有。

有没有更智能的解决方案?

我们发现的最佳解决方案是创建一个 IconManager ,它处理我们应用程序中的所有图标。

要创建和应用图标,我们使用IconManager::create(QWidget *widget, QString iconPath);

然后,当我们需要更新所有图标时,我们称之为IconManager::refreshAll();

在它里面,我们在小部件和iconPath之间有一个映射,当调用refreshAll时,我们执行类似于

for (std::map<QWidget*, String>::iterator it = Map.begin(); it != Map.end(); ++it)
{
    QPixmap pix(it->second);
    QIcon icon(pix);
    it->first->setIcon(icon);
}

最新更新