【问题标题】:QIcon not being displayed on QPushButtonQPushButton 上未显示 QIcon
【发布时间】:2015-11-25 14:41:07
【问题描述】:

我正在学习如何使用 Qt 进行 C++ 编程。当我单击一个按钮并且与该按钮相关的矩阵上的位置等于-1时,我想要显示这个图像,我还想清除同一个按钮上的文本,我的代码到现在为止部分是:

if(Tabuleiro[x][y] == -1){
    this->Botoes[x][y]->setText("");
    this->Botoes[x][y]->setIcon(QIcon("bomba.png"));
}

Tabuleiro 是一个 int 矩阵,Botoes 是一个指向 QPushButtons 的指针矩阵,而“bomba.png”是我想要显示的图像。该图像与项目位于同一文件夹中,但是一旦我运行它就不会显示。我还尝试使用 Qt 资源系统,我在其上创建了一个名为 imagens.qrc 的新资源我创建了一个前缀 /Imagem 并将我的图像放在那里,这就是代码之后的样子:

if(Tabuleiro[x][y] == -1){
        this->Botoes[x][y]->setText("");
        this->Botoes[x][y]->setIcon(QIcon(":/Imagem/bomba.png"));
    }

但它仍然无法正常工作。我究竟做错了什么?另外,我尝试使用

this->Botoes[x][y]->text().clear();

而不是

this->Botoes[x][y]->setText("");

但它不起作用,你知道为什么吗?

【问题讨论】:

  • 确保您的应用程序工作目录中的PNG(可执行文件所在的位置)。
  • @Archie 工作目录与可执行目录不同
  • @joão-areias 考虑使用Qt资源系统doc.qt.io/qt-5/resources.html
  • 谢谢 Archie,不是这样,但还是没有解决
  • 感谢@KamilKlimek 我刚刚尝试使用 Qt 资源,但仍然没有工作:(

标签: c++ qt


【解决方案1】:

请包括<QApplication><QStyle> 并尝试:

this->Botoes[x][y]->setIcon( qApp->style()->standardIcon( QStyle::SP_MessageBoxWarning ) );

如果它有效(显示警告图标):那么,这意味着您没有正确加载资源。

你也可以检查一下:

QPixmap foo( ":/Imagem/bomba.png" );
bool found = !foo.isNull(); // true if png file was found, false if it was not

如果为假,再次表示您没有正确加载资源,如果为真,则图标应显示在按钮中。

此外,您还可以尝试this->Botoes[x][y]->setIconSize( QSize(16,16) ),因为如果之前有人这样做了this->Botoes[x][y]->setIconSize( QSize(0,0) );,您的按钮图标将不会显示!

【讨论】:

  • 所以 b 应该是真的找到了 png 吗?这很奇怪,我认为这是错误的,因为 foo 上有一些东西并且它不是空的。但是谢谢,自从图标出现后,我在加载资源时搞砸了
  • 我的错误,我编辑了帖子。 isNull 表示未找到 png。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多