如何在QPushButton上设置图片?

106

我想在 QPushButton 上设置一张图片,同时 QPushButton 的大小应该根据图片的大小自适应。使用 QLabel 时可以实现这一点,但是使用 QPushButton 时不能。

如果有人有解决方案,请帮忙提供。


3
在Qt中,设置按钮上的图片有两种方法:通过编程方式设置图片(http://qt-articles.blogspot.com/2010/06/how-to-customize-button-in-qt.html),以及通过样式表设置图片(http://qt-articles.blogspot.com/2010/06/how-to-add-stylesheet-for-button-in-qt.html)。 - Naruto
非常欢迎您 :) 如果您觉得答案正确,请将其标记为正确,以便其他遇到类似问题的人受益。 - Naruto
9个回答

77

您可以使用 pixmap 作为图标,然后将此图标放置在按钮上。

为确保按钮的尺寸正确,您需要根据 pixmap 的大小调整图标的大小。

类似这样的代码应该可以实现:

QPixmap pixmap("image_path");
QIcon ButtonIcon(pixmap);
button->setIcon(ButtonIcon);
button->setIconSize(pixmap.rect().size());

7
我知道这篇文章有点旧,但我已经尝试过了,可是我的按钮图标仍然是默认的。没有任何错误提示,我的资源文件似乎也都已经加载了,路径也没问题。为什么对我不起作用? - mrg95

59
QPushButton *button = new QPushButton;
button->setIcon(QIcon(":/icons/..."));
button->setIconSize(QSize(65, 65));

11

您也可以使用:

button.setStyleSheet("qproperty-icon: url(:/path/to/images.png);");

注意:这有点hacky。你应该只在万不得已时使用它。图标应该从 C++ 代码或 Qt Designer 中设置。


10

您可能也希望设置按钮的尺寸。

QPixmap pixmap("image_path");
QIcon ButtonIcon(pixmap);
button->setIcon(ButtonIcon);
button->setIconSize(pixmap.rect().size());
button->setFixedSize(pixmap.rect().size());

6

我认为你不能在任何现有的按钮类上设置任意大小的图片。如果你想要一个简单的像按钮一样的图片,你可以编写自己的QAbstractButton子类,例如:

class ImageButton : public QAbstractButton {
Q_OBJECT
public:
...
    void setPixmap( const QPixmap& pm ) { m_pixmap = pm; update(); }
    QSize sizeHint() const { return m_pixmap.size(); }
protected:
    void paintEvent( QPaintEvent* e ) {
        QPainter p( this );
        p.drawPixmap( 0, 0, m_pixmap );
    }
};

谢谢回答。您能否帮我展示如何使用QPushButton来实现这段代码,而不是QAbstractButton呢?因为我的要求是使用QPushButton。所以,请帮帮我。 - greshi Gupta
正如我所说,我认为没有一种适当的方法。不过如果有的话,你可以尝试使用QStyle和样式表来解决问题。建议你去那里看看。 - Frank Osterfeld

5
你可以在QtDesigner中完成此操作。只需单击按钮,然后转到图标属性,选择你的图像文件即可。

在尝试为每个状态设置图标之前,请使用基本的“icon”设置来执行此操作,至少要看到它与您的图像一起工作。将图标的大小设置为您的图像大小或至少足够大,否则它将无法显示。 - ClearCrescendo
这个不起作用,因为“图标”部分要求您应用一些主题。QT6.1。我以为它会打开一个对话框,然后我可以选择一个图像文件,但实际上并不是这样的。 - Nicholas Humphrey

3

这是一个老的但仍然有用的技术,已经在QT5.3中进行了全面测试。

注意,关于资源路径的例子:

我的情况下,我在源代码项目中创建了一个名为“Ressources”的资源目录。

文件夹“ressources”包含图片和图标。然后我在Qt中添加了一个前缀“Images”,所以像素图路径变为:

QPixmap pixmap(":/images/Ressources/icone_pdf.png");

JF


答案应该提供有关如何在QPushButton中使用QPixmap的更多信息。 - bunto1

1
如果有人需要第一个答案的PyQt版本:
class PictureButton(QAbstractButton):

  def __init__(self, picture, parent):
    super().__init__(parent)
    self.setPicture(QPixmap(picture))

  def setPicture(self, picture):
    self.picture = picture
    self.update()

  def sizeHint(self):
    return self.picture.size()

  def paintEvent(self, e):
    painter = QPainter(self)
    painter.drawPixmap(0, 0, self.picture)

1

只需使用此代码

QPixmap pixmap("path_to_icon");
QIcon iconBack(pixmap);

请注意:"path_to_icon" 是您项目中 .qrc 文件中图像图标的路径。 您可以在此处找到如何添加.qrc文件here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接