qt之proxy()代理探究

简介: qt: proxy()代理探究


查看源码:

qt中源码查阅可看到:

/*!
    \since 4.6

    \fn const QStyle *QStyle::proxy() const

    This function returns the current proxy for this style.
    By default most styles will return themselves. However
    when a proxy style is in use, it will allow the style to
    call back into its proxy.
*/
const QStyle * QStyle::proxy() const
{
    Q_D(const QStyle);
    return d->proxyStyle;
}

问题起因:

在封装函数的时候,
int radius = proxy()->pixelMetric(PM_FrameRadius, opt, w); //为什么这里使用proxy()->会显示报错,没有匹配到的相应的函数
// int radius = DStyle::pixelMetric(PM_FrameRadius, opt, w);     //而下面的可以通过


尝试分析:

检索Qt帮助手册:pixelMetric;发现一共有如下QStyle–>QCommonStyle–>QProxyStyle (只有这三个,依次为重写上一个)

int QStyle::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const

int QCommonStyle::pixelMetric(QStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const

int QProxyStyle::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const

int DStyle::pixelMetric(QStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const override;


正确回答:

然而,上面的分析实际上,并没有什么卵用,用下面一句话解决:

proxy()实际上就是返回它自己,相当于当前类的this指针;通过自己实际工程中的验证,也的确是这样这理解

其源码英文的注释翻译如下:

此函数返回此样式的当前代理。 默认情况下,大多数样式都会返回。 然而当使用代理样式时,它将允许样式回调它的代理.


系列地址:

QtExamples

欢迎 starfork 这个系列的 QT / DTK 学习,附学习由浅入深的目录。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值