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