Qt 图像不会显示在按钮中

Posted

技术标签:

【中文标题】Qt 图像不会显示在按钮中【英文标题】:Qt Image won't show up in button 【发布时间】:2018-10-24 19:02:57 【问题描述】:

我正在创建一个 Qt 应用程序,并且我有一个我想用作按钮而不是文本的图像。不幸的是,显示的只是一个空按钮。

我尝试了两种不同的方法来让它显示两种方法的相同结果。

方法一的代码:

ui->setupUi(this);

QPixmap pix(":/svg/resources/menu.svg");
int w = ui->menuButton->width();
int h = ui->menuButton->height();
ui->menuButton->setMask(pix.scaled(w,h,Qt::KeepAspectRatio).mask());

我在这里找到了第二种方法的信息:Adding image to QPushButton on Qt

方法二的代码:

ui->setupUi(this);

QIcon icon(":/svg/resources/menu.svg");
ui->menuButton->setIcon(icon);

有人可以帮我弄清楚为什么我的图片没有显示并且按钮只是空的吗?

【问题讨论】:

您是否检查过资源是否正确加载——第一个示例为pix.isNull(),第二个示例为icon.isNull()。另请注意,在您提供的第一个示例中,您使用缩放像素图中的 alpha 掩码来设置 QPushButton 的形状——而不是设置像素图本身。 我查过了,它是一个空像素图... 当我尝试使用图标而不是像素图时,它不会显示为 null。但我仍然得到相同的结果。 【参考方案1】:

在我的项目中使用.svg图片作为按钮图标没问题,可能是按钮大小丢失了,试试:

ui->menuButton->setIcon(QIcon(":/svg/resources/menu.svg"));
ui->menuButton->setToolTip("optional tooltip");
ui->menuButton->setFixedSize(QSize(28,28));

假设您将图标正确存储在资源文件中。如果没有,创建一个新的: 右键单击您的顶部项目文件夹(在项目树中)-> 添加新的.. -> 在左侧选择 Qt,在右侧窗口中选择 Qt 资源文件 -> 出现一个新窗口。

添加前缀 -> 添加文件(您的图标)

【讨论】:

顺便说一句,您的解决方案让我意识到我错误地创建了我的变量。我以前做过QIcon icon(":/svg/resources/menu.svg"); 而不是QIcon icon = QIcon(":/svg/resources/menu.svg");。将其更改为后一段代码后,一切正常,无需我指定大小。【参考方案2】:

您使用 .svg 图像格式。您确定您的应用程序加载 .svg 的图像格式插件吗?图像插件必须位于应用程序当前目录的“imageformats”目录中。你可以在Qt目录.../Desktop/Qt/<version>/<mingw or msvc>/plugins/imageformats找到可用的插件

【讨论】:

我检查了这个目录。我在那里看到了 svg 的 dll。我继续尝试使用 jpeg 进行此操作,并得到了相同的结果。

以上是关于Qt 图像不会显示在按钮中的主要内容,如果未能解决你的问题,请参考以下文章

ios中图像的ScrollView

Rails:数据库中图像的下一个/上一个按钮

为啥 Qt 中图像的大小会增加?

SwiftUI 中图像按钮的可点击区域

UIButton中图像下的标签

WPF:按钮模板中图像下的文本