0

我尝试使用这个广为人知的代码将图像设置为 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) )。即它是空的。关于我哪里出错的任何想法?

提前致谢!

4

4 回答 4

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));
于 2013-11-14T09:08:28.053 回答
3

请不要在那里使用指针。

您甚至不必创建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())
于 2013-11-14T08:26:20.090 回答
1

您的资源是否已正确初始化?你可以试试这个:(来自文档

如果您在静态库中有资源,您可能需要通过使用 .qrc 文件的基本名称调用 Q_INIT_RESOURCE() 来强制初始化资源。例如:

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     Q_INIT_RESOURCE(graphlib);
     ...
     return app.exec();
 }

编辑 更重要的是:

QPixmap 假定有一个“图像”前缀。尝试QPixmap(":/logo.png");

于 2013-11-14T08:19:43.437 回答
1

我认为您应该致电:

QPixmap *pic = new QPixmap(":/images/images/logo.png");

因为你已经设置了前缀/images

于 2013-11-14T08:25:56.283 回答