Qt我能以编程方式设置资源吗?

时间:2012-06-18 12:24:21

标签: c++ qt

在Qt c ++中,有没有办法以编程方式设置资源? 我想让用户设置exe图标和他将加载到应用程序中的html文件(QtWebKit)。
所以它将嵌入到当前使用资源Collection Files(.qrc)

编译的应用程序中

2 个答案:

答案 0 :(得分:4)

在您的应用程序运行期间,Qt资源系统中的文件无法更改,因此如果我理解正确,则无法“以编程方式”。

但是,您可以以编程方式(使用构建过程中的脚本)生成.qrc文件,如果这是您想要的。但我想这是你想要的,因为你在谈论用户,他们很可能不想重新编译你的应用程序来使用它。

如果您想让用户在几个图标之间进行选择(作为示例;但这可能适用于其他自定义)并让他们选择自定义文件。您可以从Qt资源和真实文件系统中抽象出来,首先扫描应用程序的子文件夹以获取图标,然后扫描资源(仅在本地版本不存在之后将:/添加到路径中)。因此,用户可以使用您使用此方法的本地文件“覆盖”所有资源文件。

我成功将此方法应用于语言文件,另一个例子。对于某些默认语言,:/lang/中有文件,但用户也可以将文件放在<appdir>/lang/中并使用它们。请记住,如果用户也可以在可用文件之间进行选择,则可能需要在运行时期间在目录中搜索合适的文件。

答案 1 :(得分:2)

Windows不会“让”用户设置“exe”图标 - 不是没有额外的工具或代码。您当然可以使用Windows API修改可执行文件,但这不能保证可以正常工作。如果以安全的方式安装应用程序,它将在没有管理权限的情况下运行,并且无法修改其图标。基本上:这是一个愚蠢的想法。不要这样做。

您当然可以使用以下代码在运行时更改应用程序的图标:

void setIcon(QWidget* widget, QPixmap* pixmap);
{
   WId wid = widget->winId();
   HINSTANCE inst = (HINSTANCE)qWinAppInst();
   QPixmap large = pixmap->scaled(48, 48, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
   SendMessage(wid, WM_SETICON, ICON_BIG, (LPARAM)large->toWinHICON());
   QPixmap small = pixmap->scaled(24, 24, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
   SendMessage(wid, WM_SETICON, ICON_SMALL, (LPARAM)small->toWinHICON());
}