我有一个程序可以动态(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);
}