将图像设置为 Qt 按钮



我试图使用这个广为人知的代码将图像设置为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");

最新更新