2

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

4

2 回答 2

4

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

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

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

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

于 2012-06-18T13:04:41.063 回答
3

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());
}
于 2012-06-18T22:54:52.960 回答