我尝试使用这个众所周知的代码将图像设置为Qt按钮。
QPixmap *pic = new QPixmap(":/images/logo.png");
QIcon *icon = new QIcon(*pic);
ui->pushButton->setIcon(*icon);
ui->pushButton->setIconSize(QSize(pic->width(), pic->height()));
这是我的qrc文件
<RCC>
<qresource prefix="/images">
<file>images/logo.png</file>
</qresource>
</RCC>
即使程序编译,总是会在
发生运行时异常QPixmap *pic = new QPixmap(":/images/logo.png");
当我尝试在输出控制台上打印* pic时,它显示pic = QPixmap(QSize(0,0))。即它为空。关于我哪里出错的任何想法?
提前致谢!
答案 0 :(得分:3)
请不要在那里使用指针。
您甚至不必创建QPixmap
对象,然后使用它来创建QIcon
对象。将文件名作为参数的QIcon has a constructor。但这取决于你。还要检查您的资源位置。它看起来应该是:/images/images/logo.png
QPixmap pix(":/images/images/logo.png");
QIcon icon(pix);
ui->pushButton->setIcon(icon);
ui->pushButton->setIconSize(pix.size())
答案 1 :(得分:3)
如果在资源定义中使用别名,则使用资源会更容易: -
<RCC>
<qresource prefix="/images">
<file>images/logo.png</file>
<file alias="logo">images/logo.png</file>
</qresource>
</RCC>
然后您可以通过别名引用资源,如果更改资源中的图像,则无需更改代码: -
QPixmap image(":/images/logo");
QPushButton* pPushButton = new QPushButton(QIcon(image));
或者如果已经定义了按钮: -
pPushButton->setIcon(QIcon(image));
答案 2 :(得分:1)
您的资源是否已正确初始化?您可以尝试这样做:(来自docs)
如果您在静态库中有资源,则可能需要强制使用 通过调用Q_INIT_RESOURCE()来初始化您的资源 .qrc文件的基本名称。例如:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Q_INIT_RESOURCE(graphlib);
...
return app.exec();
}
<强> 修改 强> 更重要的是:
QPixmap采用'images'前缀。试试QPixmap(":/logo.png");
答案 3 :(得分:1)
我想你应该致电:
QPixmap *pic = new QPixmap(":/images/images/logo.png");
因为您已经设置了前缀/images
。