清除方法来消除QGraphicsItem :: paint生成的"未使用的参数'小部件'"警告

Pie*_*ter 15 c++ qt

QGraphicsItem::paint 有以下签名:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Run Code Online (Sandbox Code Playgroud)

当我创建自定义QGraphicsItems时,我必须为此函数提供实现.事情是......我永远不需要使用optionwidget参数,但我不能仅仅因为显而易见的原因删除它们.我总是看到这些编译器警告:

警告:未使用的参数'widget'

警告:未使用的参数'选项'

是否有适当的摆脱这些警告?我知道我可以通过提及函数中未使用的参数来隐藏它们,但这是一个非常脏的解决方案,我想知道是否有更好的选择.

Fra*_*eld 30

省略参数名称:

void paint( ..., QWidget* ) {
Run Code Online (Sandbox Code Playgroud)

或使用Q_UNUSED宏:

void paint( ..., QWidget* widget ) {
    Q_UNUSED( widget )
    ...
Run Code Online (Sandbox Code Playgroud)


Ben*_*ing 22

不要为未使用的参数提供参数名称.例如(我不确定你的"事件"指的是什么),要摆脱warning: unused parameter ‘option’,将你的签名改为:

void paint(QPainter *painter, const QStyleOptionGraphicsItem * /* unused */, QWidget *widget)
Run Code Online (Sandbox Code Playgroud)

(/* unused */就警告而言,标签是不必要的,但我发现它对人类读者很有用.)


max*_*zig 7

您基本上有三种正确的方法来消除未使用的参数编译器警告:

将未使用的参数显式转换为 void:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
           QWidget *widget)
{
    (void)option;
    (void)widget;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这种模式符合标准并且被程序员广泛理解。像 GCC 这样的编译器看到使用了该参数,因此不会发出警告,并且他们优化了这些行,因为它们是无操作(即没有效果)。

或者,您可以使用 Qt 的Q_UNUSED宏:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
           QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

对于 GCC 和其他人,它也扩展到(void)-cast 模式,但它也可能包括用于模糊编译器的变通方法,这还不够。例如,在 Qt 5.4.1 中,它被定义为:

#if defined(Q_CC_RVCT)
template <typename T>
inline void qUnused(T &x) { (void)x; }
#  define Q_UNUSED(x) qUnused(x);
#else
#  define Q_UNUSED(x) (void)x;
#endif
Run Code Online (Sandbox Code Playgroud)

使用Q_UNUSED可以说更容易阅读,并且必须用于对 Qt 的贡献。

注释掉参数名称的第三个选项:

void paint(QPainter *painter, const QStyleOptionGraphicsItem * /* option */,
           QWidget * /* widget */)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这可以说更难阅读。此外,它可能会增加完全删除参数名称的诱惑——这可能会使函数更难理解。当然,在更改代码以使用未使用的参数之前,此样式还涉及比其他样式更多的编辑操作。