将图像设置为qt按钮

时间:2013-11-14 08:00:48

标签: qt resources qpixmap

我尝试使用这个众所周知的代码将图像设置为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 个答案:

答案 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