我将 QPixmap 传递给 QAbstractButton::setIcon 而不是 QIcon,但我没有收到错误...为啥?

Posted

技术标签:

【中文标题】我将 QPixmap 传递给 QAbstractButton::setIcon 而不是 QIcon,但我没有收到错误...为啥?【英文标题】:I'm passing a QPixmap to QAbstractButton::setIcon instead of a QIcon, but I'm not getting an error...why?我将 QPixmap 传递给 QAbstractButton::setIcon 而不是 QIcon,但我没有收到错误...为什么? 【发布时间】:2019-06-11 15:34:20 【问题描述】:

只是想了解为什么我没有在这里遇到错误。 QAbstractButton(实际上我使用的是 QPushButton,但我认为这两种方式都一样)成员函数 setIcon 接受一个 QIcon 参数...

函数看起来像:void setIcon(const QIcon &icon),我认为它没有过载。那么为什么我可以调用该函数并给它一个 QPixmap 作为参数,却没有报错呢?

这一行:PB->setIcon(QPixmap());,其中PB 是一个 QPushButton 对象,不会给我一个错误,我只是想知道为什么,因为我是 C++ 新手,也许我错过了一些更基本的东西。任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

您不会收到错误,因为您提供给 setIcon() 函数的 QPixmap() 参数隐式转换为 QIcon 对象。或者,更好的说法是,编译器隐式地从QPixmap 中创建了一个QIcon 对象,因为存在以下构造函数:

QIcon::QIcon(const QPixmap &)

【讨论】:

啊,好的,谢谢,我以前看过这个!并且可以在此过程中的任何地方使用explicit 关键字以使编译器不进行隐式转换吗?如果是这样,关键字会去哪里? QIcon 构造函数本身需要声明为explicit

以上是关于我将 QPixmap 传递给 QAbstractButton::setIcon 而不是 QIcon,但我没有收到错误...为啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用单色 QImage

Qt 之 QPixmap

PyQt5 不会在标签中显示图片

使用 QPainter 在 QWidget 上绘制 QPixmap Rects

在 QGraphicsScene 中拖动 QPixmap:如何避免 lambda 参数中不允许使用“自动”

运行一个程序,我将文件名传递给 Main