我试图使用这个广为人知的代码将图像设置为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) )。 即它是空的。关于我哪里出错了,有什么想法吗?
提前感谢!
请不要在那里使用指针。
您甚至不必创建一个QPixmap
对象,然后使用它来创建QIcon
对象。QIcon 有一个将文件名作为参数的构造函数。但这取决于你。还要检查资源位置。看起来应该:/images/images/logo.png
QPixmap pix(":/images/images/logo.png");
QIcon icon(pix);
ui->pushButton->setIcon(icon);
ui->pushButton->setIconSize(pix.size())
如果在资源定义中使用别名,则使用资源会更容易一些: -
<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));
我认为你应该打电话:
QPixmap *pic = new QPixmap(":/images/images/logo.png");
因为您已经设置了前缀/images
.
您的资源是否正确初始化?你可以试试这个:(来自文档)
如果静态库中有资源,则可能需要强制 通过使用调用 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");